在Java中拆分*?

Pan*_*har 3 java regex string split escaping

我想String在Java中拆分*使用该split方法.这是代码:

String str = "abc*def";
String temp[] = str.split("*");
System.out.println(temp[0]);
Run Code Online (Sandbox Code Playgroud)

但是这个程序给了我以下错误:

Exception in thread "main" java.util.regex.PatternSyntaxException: 
Dangling meta character '*' near index 0 *
Run Code Online (Sandbox Code Playgroud)

我稍微调整了一下代码,'\\*'用作分隔符,它完美地运行.任何人都可以解释这种行为(或建议一个替代解决方案)?

我不想用StringTokenizer.

dle*_*lev 5

split()方法实际上接受正则表达式.该*字符在正则表达式中具有特殊含义,并且不能单独出现.为了告诉正则表达式使用实际*字符,您需要使用字符来转义它\.

因此,您的代码变为:

String str = "abc*def";
String temp[] = str.split("\\*");
System.out.println(temp[0]);    // Prints "abc"
Run Code Online (Sandbox Code Playgroud)

注意\\:你也需要转义Java的斜杠.

如果你想在将来避免这个问题,请阅读正则表达式,这样你就可以很好地了解你可以使用哪些类型的表达式,以及你需要逃脱哪些字符.