2

私は現在、Java プログラムを作成しています。そのサブタスクの 1 つは、文字列を取得して特定の場所で分割することです。だから、ここに私のコードの小さなスニペットがあります:

public class Driver
{
    public static void main(String[] args)
    {
        String str = "a+d";
        String[] strparts = str.split("+");
        for (String item : strparts)
        {
            System.out.println(item);
        }
    }
}

私は結果を期待していました:

a
d

しかし、驚いたことに、次のようになります。

Exception in thread "main" java.util.regex.PatternSyntaxException: Dangling meta character '+' near index 0
+
^

    at java.util.regex.Pattern.error(Pattern.java:1955)
    at java.util.regex.Pattern.sequence(Pattern.java:2123)
    at java.util.regex.Pattern.expr(Pattern.java:1996)
    at java.util.regex.Pattern.compile(Pattern.java:1696)
    at java.util.regex.Pattern.<init>(Pattern.java:1351)
    at java.util.regex.Pattern.compile(Pattern.java:1028)
    at java.lang.String.split(String.java:2367)
    at java.lang.String.split(String.java:2409)
    at Test.Driver.main(Driver.java:8)

どうしたの?
ありがとう!

4

4 に答える 4

7

+前の文字を 1 回以上繰り返す正規表現の特殊なメタ文字です。リテラルと一致するようにエスケープする必要があります+

String[] strparts = str.split("\\+");
于 2014-10-24T02:52:31.163 に答える
1

記号 + は正規表現の一部であり、前にバックスラッシュを付ける必要があります。

String[] strparts = str.split("\\+");

リテラル Java 文字列では、バックスラッシュはエスケープ文字です。リテラル文字列"\\"は単一のバックスラッシュです。正規表現では、バックスラッシュもエスケープ文字です。

+ は正規表現で使われる記号なので、Java 文字列としては と書きます"\\+"

于 2014-10-24T03:23:17.420 に答える
0

String の戻り型メソッドを作成することもできます。これにより、他の String 操作メソッドを実装する場合に、はるかに簡単になります。

public static void main(String[] args) {
    String plainString  = toArray("a+b");
}
public static String[] toArray(String s) {
    String myArray[] = s.split("\\+");
    return myArray[];
}
于 2014-10-24T07:30:51.867 に答える
0

Java paiからわかるように:

public String[] split(文字列正規表現)

指定された正規表現の一致に基づいてこの文字列を分割します。

したがって、ここでは正規表現が必要です。

    String[] strparts = str.split("\\+");
于 2014-10-24T04:19:54.043 に答える