-1

在拆分方法中,如果我只传递这样的“+”字符:

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("\\+");

它工作正常。

这种行为有什么原因吗?

4

2 回答 2

7

split 方法将“+”视为正则表达式,因此 + 基本上是正则表达式中的运算符。如果您使用“\\+”,那么它将它作为字符。

如需参考,请在此处查看

于 2012-12-12T06:20:17.160 回答
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("\+") 起作用的原因。

于 2012-12-12T06:23:27.690 回答