通过星号分割 Java 字符串的正则表达式

19

需要帮助。

line.split("*");

我使用这行代码将一个字符串按照星号分割。但是,我的编译器报错了,显示"INVALID REGULAR EXPRESSION: DANGLING META CHARACTER '*'"

如何解决这个问题?先谢谢。

5个回答

39

* 在正则表达式中有特殊含义,必须进行转义。

line.split("\\*");

3
由于您使用了一个“*”字符,它是一个正则表达式。如果您想要使用这个字符,需要放置类似以下的内容:
line.split("\\*");

2
如下所示的表格中,*具有特殊含义,即零次或多次
贪婪模式 懒惰模式 占有模式 含义
X? X?? X?+ X,零次或一次
X* X*? X*+ X,零次或多次
X+ X+? X++ X,至少一次
X{n} X{n}? X{n}+ X,恰好 n 次
X{n,} X{n,}? X{n,}+ X,至少 n 次
X{n,m} X{n,m}? X{n,m}+ X,至少 n 次但不超过 m 次
因此,您需要使用\转义它。但是,\也是一个特殊字符,因此您需要再添加一个\来转义\。因此,所需的模式变为\\*
String[] arr = line.split("\\*");
System.out.println(java.util.Arrays.toString(arr));

作为anubhava建议的另一种选择,您可以使用[*]。字符*在用作字符类时不需要转义。
String[] arr = line.split("[*]");
System.out.println(java.util.Arrays.toString(arr));

1
谢谢@anubhava提供宝贵的建议。我现在已经将您的建议融入到我的答案中了。 - Arvind Kumar Avinash

2
尝试使用以下语句:

试试这个语句:

line.split("\\*");

2

* 是正则表达式中的元字符。它用于匹配 0 或多个元素。如果您想将 * 作为普通字符使用而不是特殊字符(即跳过其作为元字符的行为),则需要在其前面添加转义字符。

例如:String[] split = line.split("\\*");

希望这可以帮助您。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接