文字列を分割するために使用しているコードは次のとおりです
str = "1234".split("") ;
System.out.println(str.length) ; //this gives 5
1 の直前に余分な空白が追加されています。つまりstr[0]=" "
、先頭の空白を使用せずにこの文字列を分割する方法です。
文字列を分割するために使用しているコードは次のとおりです
str = "1234".split("") ;
System.out.println(str.length) ; //this gives 5
1 の直前に余分な空白が追加されています。つまりstr[0]=" "
、先頭の空白を使用せずにこの文字列を分割する方法です。
これを試して:
char[] str = "1234".toCharArray();
System.out.println(str.length) ;
配列全体を印刷することからわかるように、実際には先頭の空白要素を取得していません。先頭の空の文字列を取得しています。
System.out.println(java.util.Arrays.toString("1234".split("")));
出力:
[, 1, 2, 3, 4]
その動作の理論的根拠は、 であるという事実"1234".indexOf("")
です0
。つまり、区切り文字列は検索された文字列の先頭に一致するため、そこで分割が作成され、返された配列に空の初期要素が与えられます。String.split
区切り文字は文字列の末尾にも一致しますが、(ドキュメントにあるように)「末尾の空の文字列は破棄される」ため、そこに余分な空の要素はありません。
ただし、Java 8 では動作が変更されました。現在、ドキュメントには次のようにも記載されています。
この文字列の先頭に正の幅の一致がある場合、空の先行部分文字列が結果の配列の先頭に含まれます。ただし、最初の幅がゼロの一致では、そのような空の先行部分文字列は生成されません。
( Java 7とJava 8String.split
のドキュメントを比較してください。)
したがって、Java 8 以降では、上記の例の出力は次のようになります。
[1, 2, 3, 4]
変更の詳細については、次を参照してください: Java 8 の分割では、結果配列の開始時に空の文字列が削除されることがあるのはなぜですか?
とにかく、String.split
この特定のケースで使用するのはやり過ぎです。すべての文字の配列を取得するには、 を使用する必要があるという他の答えは正しいですstr.toCharArray()
。これは、より高速で簡単です。文字の配列ではなく、1 文字の文字列の配列が本当に必要な場合は、「文字列を文字列の配列に分割する」を参照してください。
代わりに toCharArray() を使用してください......
"" で分割する場合は、文字列の toCharArray メソッドを使用する必要があります。
String str = "1234";
System.out.println(str.toCharArray().length);
私はただやります:
str = "1 2 3 4".split(" ");
もちろん、「1234」でなければならない特定の理由がない限り