我想使用String
方法在*
上用Java分割split
。这是代码:
String str = "abc*def";
String temp[] = str.split("*");
System.out.println(temp[0]);
但是这个程序给了我以下错误:
Exception in thread "main" java.util.regex.PatternSyntaxException:
Dangling meta character '*' near index 0 *
我稍微调整了一下代码,使用'\\*'
作为分隔符,这非常有效。任何人都可以解释这种行为(或建议替代解决方案)吗?
我不想使用StringTokenizer
。
答案 0 :(得分:5)
split()
方法实际上接受正则表达式。 *
字符在正则表达式中具有特殊含义,并且不能单独出现。为了告诉正则表达式使用实际的*
字符,您需要使用\
字符对其进行转义。
因此,您的代码变为:
String str = "abc*def";
String temp[] = str.split("\\*");
System.out.println(temp[0]); // Prints "abc"
注意\\
:你也需要转义Java的斜杠。
如果你想在将来避免这个问题,请read up on regular expressions,这样你就可以很好地了解可以使用哪些类型的表达,以及你需要逃脱哪些角色
答案 1 :(得分:1)
String.split()需要正则表达式。在正则表达式中*
具有特殊含义(在它之前的0或更多字符类),因此必须对其进行转义。 \*
完成它。由于您正在使用Java字符串\\
是\
的转义序列,因此您的正则表达式变为\*
,其行为正确。
答案 2 :(得分:1)
Split接受正则表达式拆分,而不是字符串。正则表达式将*作为保留字符,因此您需要使用反斜杠转义它。
在java中,字符串中的反斜杠也是特殊字符。它们用于换行符(\ n),制表符(\ t)以及许多其他不常见的字符。
因为你正在编写java,并编写一个正则表达式,你需要两次转义*字符。因此'\ *'。