1

String.split(String delim);奇妙な動作をしています。文字列をすべての文字で分割して返し、まったく同じように出力を返していますString.toCharArray();[そして、それは私を夢中にさせています]

私の問題を再現する方法は次のとおりです。

System.out.println(Arrays.toString("CENTURY:a,b,c|HALF_CENTURY:c,d,e".split("|")));

出力: [, C, E, N, T, U, R, Y, :, a, ,, b, ,, c, |, H, A, L, F, _, C, E, N, T, U、R、Y、:、c、、、d、、、e]

4

4 に答える 4

5

String.split(regex)正規表現を受け入れます。正規表現の世界|では aであり、それを として扱うためにmeta character(special character)でエスケープします。\\normal character

Arrays.toString("CENTURY:a,b,c|HALF_CENTURY:c,d,e".split("\\|"));

または内部に埋め込むcharacter class[|]

Arrays.toString("CENTURY:a,b,c|HALF_CENTURY:c,d,e".split("[|]"));
于 2013-02-13T15:58:02.707 に答える
1
"CENTURY:a,b,c|HALF_CENTURY:c,d,e".split("|");

split の引数は実際には正規表現であるため、これは機能しません。特別な意味があります。

その理由は、split() の引数が正規表現にコンパイルされるためです。正規表現で特別な文字は引用符で囲む必要があります

バックスラッシュは一般に文字列のエスケープ文字でもあり、2 重にする必要があります。

これを試して:

"CENTURY:a,b,c|HALF_CENTURY:c,d,e".split("\\|");
于 2013-02-13T15:58:43.503 に答える
0

を探していPattern.quote(String)ます。詳しくはこちらをご覧ください。

于 2013-02-13T16:03:37.733 に答える
0

試してみてください

split("\\|")

あなたはエスケープする必要があります|

于 2013-02-13T15:58:43.167 に答える