1

コンマと括弧を削除して、値{200,200}を 2 つの文字列 ( 200and )に分割したいと考えています。200

しかし、標準パターンを使用しようとすると^\{*|,|\}*$、エラーが発生します (不正なエスケープ文字) Java でこの分割を行うにはどうすればよいですか?

String[] d = a.split("^\{*|,|\}*$");
4

5 に答える 5

4

Java では、正規表現でエスケープ文字を 2 倍にする必要があります。

String [] data = a.split("^\\{*|,|\\}*$");

これは、正規表現が文字列リテラルにあり、エスケープ文字が文字列リテラルで既に意味を持っているためです。

于 2013-02-08T22:47:18.690 に答える
1

次のより単純な正規表現を試してください。

String[] data = a.split("[,{}]");

答えは位置data[1]data[2]

于 2013-02-08T22:50:25.800 に答える
0

これは、特定の例では分割よりもはるかに高速です。

int i = a.indexOf(',');
String s1 = a.substring(1, i);
String s2 = a.substring(i+1, a.length()-1);
于 2013-02-08T23:02:21.823 に答える
0

すべての初期データ文字列が で始まり、{で終わり、}多くのカンマ区切りの値が含まれる可能性がある場合、分割は のように単純になりa.substring(1, a.length()).split(",")ます。

于 2013-02-09T21:40:29.090 に答える
0

当面の問題 (別のレスポンダーが指摘したように) は、Java 文字列リテラルで使用するためにバックスラッシュをエスケープしていないことです。

とにかくsplit()、この仕事には間違ったツールです。通常の一致を実行し、グループをキャプチャして必要な部分文字列を抽出する方がはるかに簡単です。

String[] result = new String[2];
Pattern p = Pattern.compile("^\\{(\\d+),(\\d+)\\}$");
Matcher m = p.matcher("{200,200}");
if (m.matches()) {
    result[0] = m.group(1);
    result[1] = m.group(2);
}

このような単純なタスクにはコードが多すぎるように思えますが、それは Java です。

于 2013-02-10T00:40:16.240 に答える