Iてるようなものの次のプロパティで文字列を分割するために正規表現を思い付くしようとして立ち往生:Javaの正規表現の分割文字列
- で区切り| (パイプ)個々の値はパイプが含まれている場合は、文字
- は、個々の値は、バックスラッシュで終わる場合、\(バックスラッシュ)
- でエスケープバックスラッシュでエスケープ
だから、たとえば、ここにいくつかの文字列があること私は別れたい:
One|Two|Three
が得られるはず:["One", "Two", "Three"]
One\|Two\|Three
が得られるはず:["One|Two|Three"]
One\\|Two\|Three
得なければならない:["One\", "Two|Three"]
今、私は、単一の正規表現でこれを分割可能性がどのように?
更新:あなたの多くが既に提案したように、これは正規表現の良いアプリケーションではありません。また、正規表現の解は、文字を反復するだけの場合よりも数桁も遅いです。
public static List<String> splitValues(String val) {
final List<String> list = new ArrayList<String>();
boolean esc = false;
final StringBuilder sb = new StringBuilder(1024);
final CharacterIterator it = new StringCharacterIterator(val);
for(char c = it.first(); c != CharacterIterator.DONE; c = it.next()) {
if(esc) {
sb.append(c);
esc = false;
} else if(c == '\\') {
esc = true;
} else if(c == '|') {
list.add(sb.toString());
sb.delete(0, sb.length());
} else {
sb.append(c);
}
}
if(sb.length() > 0) {
list.add(sb.toString());
}
return list;
}
のは、それを明確にしましょう。あなたが望むのはこれです:分割|文字列から削除し、\で分割しないでください。文字列から\を削除し、最後に\\ |で分割します。 \を削除します。最初の部分からは\、2番目の部分から\。これは1つの正規表現でどうやって作ることができると思いますか?私にとって全く違った状況のようです... – user219882
デリミタを変更することは可能ですか? – Paul
私はあなたたちが正しいと思う!これは正規表現にとってはあまりにも多すぎるかもしれません。 –