1

特定のセパレーターが最初に出現したときに、文字列を2つの部分に分割する方法を探しています。文字列が次のようになっている場合、これは簡単に実行できます。

String s = "prefix.key value";
String[] a = s.split("[ :=]",2);

ただし、慣例により、文字列にはエスケープされた区切り文字が含まれる場合があります(区切り文字の直前に「\」が含まれます)。だから私は正規表現を更新しました-文字列:

String s = "prefix\ key value";
String[] a = s.split("[^\\\\][ :=]",2);

これにより、文字列がほぼ適切な場所で分割されますが、キーの「y」が切り捨てられます。これは、正規表現が区切り文字とその前の文字の両方に一致するためです。split()メソッドは一致した部分を切り取り、残りの文字列のみを返します。

split()を使用して、返された配列の文字列の終了文字を調べる実用的なソリューションがありますが、これは非常に複雑で時間がかかる方法のようです。

誰かもっと良いアイデアがありますか?

4

2 に答える 2

1

ネガティブルックビハインドアサーションを使用する

String[] a = s.split("(?<!\\\\)[ :=]",2);

したがって、キャラクタークラスは、前に\

于 2012-11-15T19:55:27.503 に答える
0

ステマの答えでコメントしたかったのですが、まだコメントできません。提示された正規表現に小さな変更を提案したかっただけです。

(?<!\\)[ :=]

そうしないと、エスケープコードに1つではなく2つの円記号が必要になります。

于 2012-11-15T20:19:27.907 に答える