コンマと括弧を削除して、値{200,200}
を 2 つの文字列 ( 200
and )に分割したいと考えています。200
しかし、標準パターンを使用しようとすると^\{*|,|\}*$
、エラーが発生します (不正なエスケープ文字) Java でこの分割を行うにはどうすればよいですか?
String[] d = a.split("^\{*|,|\}*$");
Java では、正規表現でエスケープ文字を 2 倍にする必要があります。
String [] data = a.split("^\\{*|,|\\}*$");
これは、正規表現が文字列リテラルにあり、エスケープ文字が文字列リテラルで既に意味を持っているためです。
次のより単純な正規表現を試してください。
String[] data = a.split("[,{}]");
答えは位置data[1]
とdata[2]
これは、特定の例では分割よりもはるかに高速です。
int i = a.indexOf(',');
String s1 = a.substring(1, i);
String s2 = a.substring(i+1, a.length()-1);
すべての初期データ文字列が で始まり、{
で終わり、}
多くのカンマ区切りの値が含まれる可能性がある場合、分割は のように単純になりa.substring(1, a.length()).split(",")
ます。
当面の問題 (別のレスポンダーが指摘したように) は、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 です。