分割式を検討する",1,2,3,4".split(",");
あなたは何を期待しますか?そうです、最初は空の文字列です。あなたの場合、最初の「a」の前とその後ろに「何もない」があります。
更新: コメントは、この説明が説明として十分ではないことを示しています (そうではないかもしれません)... しかし、それは本当に単純です: エンジンは文字列の先頭から始まり、文字列の前に何があるかを確認します。パターンに一致します。存在する場合は、その背後にあるものを分割内の新しいアイテムに割り当てます。
最初の文字には "" (後ろに何もない) があり、その前に "" (パターン) があるかどうかを調べます。あるので、"" マッチを作成します。
次に進み、後ろに 'a' があり、再び前に "" があります。したがって、2 番目の結果は "a" 文字列です。
興味深いことに、 を使用split("", -1)
すると、結果配列の最後の位置に空の文字列の結果も得られます。
編集2:さらに頭を悩ませ、これを学術的な演習と見なすと(これは実際にはお勧めしません...)split()
、文字列の正規表現をString[]
配列に変換する良い方法は1つだけ考えられます各文字列に 1 文字 (char[] とは対照的に - 他の人が素晴らしい回答を与えている....)。
String[] chars = str.split("(?<=.)", str.length());
これは、非キャプチャ グループ内の各文字の後ろを見て、それを分割し、配列のサイズを文字数に制限します (省略できますが、最後に余分なスペースができますstr.length()
) 。 -1
)
文字列の先頭と末尾を参照する nitro2k01 の代替 (以下のコメント) を借りると、次の場所で確実に分割できます。
String[] chars = str.split("(?!(^|$))");