在Java中拆分*?

时间:2011-08-20 05:18:25

标签: java regex string escaping split

我想使用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

3 个答案:

答案 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,并编写一个正则表达式,你需要两次转义*字符。因此'\ *'。