将函数拆分为包含"+"字符的String

NPK*_*PKR -1 java string

在split方法中如果我只传递'+'字符,如下所示:

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]);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

以下错误即将发生:

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)
Run Code Online (Sandbox Code Playgroud)

但如果我用以下方法替换拆分呼叫:

String[] stArr = s1.split("\\+");
Run Code Online (Sandbox Code Playgroud)

它工作正常.

这种行为有什么理由吗?

Muj*_*san 7

split方法将"+"视为正则表达式,因此+基本上是正则表达式中的运算符.如果使用"\\ +",则将其作为字符.

如需参考,请点击此处

  • +1并且因为反斜杠也是一个特殊字符,那就是"\\ +"`. (2认同)