-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 に答える