任意の " 文字で Java Strings を分割する必要があります。主なことは、その前の文字がバックスラッシュ ( \ ) ではない可能性があることです。
したがって、これらの文字列は次のように分割されます。
asdnaoe"asduwd"adfdgb => asdnaoe, asduwd, adfgfb
addfgmmnp"fd asd\"das"fsfk => addfgmmnp, fd asd\"das, fsfk
正規表現を使用してこれを達成する簡単な方法はありますか? (コーダーである私にとって最も簡単なため、RegExを使用します。また、パフォーマンスは問題ではありません...)
前もって感謝します。
私はこのようにそれを解決しました:
private static String[] split(String s) {
char[] cs = s.toCharArray();
int n = 1;
for (int i = 0; i < cs.length; i++) {
if (cs[i] == '"') {
int sn = 0;
for (int j = i - 1; j >= 0; j--) {
if (cs[j] == '\\')
sn += 1;
else
break;
}
if (sn % 2 == 0)
n += 1;
}
}
String[] result = new String[n];
int lastBreakPos = 0;
int index = 0;
for (int i = 0; i < cs.length; i++) {
if (cs[i] == '"') {
int sn = 0;
for (int j = i - 1; j >= 0; j--) {
if (cs[j] == '\\')
sn += 1;
else
break;
}
if (sn % 2 == 0) {
char[] splitcs = new char[i - lastBreakPos];
System.arraycopy(cs, lastBreakPos, splitcs, 0, i - lastBreakPos);
lastBreakPos = i + 1;
result[index] = new StringBuilder().append(splitcs).toString();
index += 1;
}
}
}
char[] splitcs = new char[cs.length - (lastBreakPos + 1)];
System.arraycopy(cs, lastBreakPos, splitcs, 0, cs.length - (lastBreakPos + 1));
result[index] = new StringBuilder().append(splitcs).toString();
return result;
}
とにかく、素晴らしい回答をありがとうございました! (ああ、それにもかかわらず、@biziclop または @Alan Moore のバージョンのいずれかを使用します。それらは短く、おそらくより効率的です! =)