在分割方法中,如果我只传递'+'这样的字符:
public class StringSplit {
public static void main(String[] str) {
String s1 = "test+plus";
String[] stArr = s1.split("+");
System.out.println(stArr.length);
for (int i = 0; i < stArr.length; i++) {
System.out.println(stArr[i]);
}
}
}
以下错误即将发生:
Exception in thread "main" java.util.regex.PatternSyntaxException: Dangling meta character '+' near index 0
+
^
at java.util.regex.Pattern.error(Pattern.java:1713)
at java.util.regex.Pattern.sequence(Pattern.java:1878)
at java.util.regex.Pattern.expr(Pattern.java:1752)
at java.util.regex.Pattern.compile(Pattern.java:1460)
at java.util.regex.Pattern.<init>(Pattern.java:1133)
at java.util.regex.Pattern.compile(Pattern.java:823)
at java.lang.String.split(String.java:2292)
at java.lang.String.split(String.java:2334)
at StringSplit.main(StringSplit.java:5)
但是,如果我用以下方法替换拆分呼叫:
String[] stArr = s1.split("\\+");
工作正常。
这种行为有什么理由吗?
答案 0 :(得分:7)
split方法将“+”视为正则表达式,因此+基本上是正则表达式中的运算符。如果使用“\\ +”,则将其作为字符。
如需参考,请查看here
答案 1 :(得分:2)
http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/String.html#split(java.lang.String)
Java中的String.split方法将正则表达式作为输入。正如您的错误消息所示,'+'字符是元字符。特别是,它说'+'之前的模式将重复1次或更多次。当然你可以用反斜杠来逃避'+',你真的是指'+'字符而不是重复模式的元字符,这就是s1.split(“\ +”)工作的原因。