※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

split:文字列を決まった文字で分割したいときに使うのです。

が。


こんな使い方しました。

データを分割・split(String)を使う
String dd = "なにかをいれます";
String[] strs = dd.split(",");
for (int i = 0; i < strs.length; i++) {
    System.out.println(strs[i]);
}
System.out.println("項目数は:" + strs.length);

これね、最後対象の文字が続いていたら分けてくれないの。
たとえばddに「aaa,bbb,ccc,,,」と入れると、上の結果は
aaa
bbb
ccc
項目数は:3
あら。最後の2つの空白はみてくれないのね。
ってなっちゃいます。

でもddに「aaa,bbb,,,ccc,」と入れると、上の結果は
aaa
bbb


ccc
項目数は:5
文字が入っている間の空白は数に入る。

これはsplitの仕様なのです。

最後の空白を省く split(String)

詳しいことの説明はここではしないのです。

参考:

このメソッドの動作は、2 つの引数を取る split メソッドを、指定された式および引数制限ゼロを指定して呼び出した場合と同じになります。

このため、末尾の空文字列は、結果の配列に含まれません。
なるほど。含まれないのね。たしかに含まれてませんでした。


でも、カンマ区切りのcsvファイル読み込みの時って、どこが空白かとかってわからないものじゃないですか。
最後が空白続きなのも多いし。


適用範囲を決められる split(String,int)

そんなときはこっち使いましょう。

参考:

用例がわかりやすいようなわかりづらいような?

つまり、分ける対象の文字を指定した後に、ある数字を入れるとわける回数を決めてくれるのね。
。。。私の説明もわかりづらい。

やってみました。
  • データを分割・split(String,int)を使う
String dd = "なにかをいれます";
String[] strs = dd.split(",",数字!);
for (int i = 0; i < strs.length; i++) {
    System.out.println(strs[i]);
}
System.out.println("項目数は:" + strs.length);
こんな感じね。

「なにかをいれます」に「aaa,bbb,ccc,,,」を入れて「数字!」をいろいろ変えてみます。

  • 「数字!」に「2」
aaaa,bbbb,cccc,,,
項目数は:1
1つだけってお願いしたから分けることなく1つだけ返したのね。

「数字!」に「2」
aaaa
bbbb,cccc,,,
項目数は:2
2つに分けてってお願いしたから一つ目のカンマで分けて返したのね。
じゃ必要項目数分だと?

  • 「数字!」に「6」
aaaa
bbbb
cccc



項目数は:6
なるほど。ぴったりですね。
じゃあ分ける項目数以上を指定したら?

  • 「数字!」に「20」
aaaa
bbbb
cccc



項目数は:6
あら、上と同じ。
つまり実際分けられる数よりも多く指定したら、分けられた数しか返ってこないってことね。
うんうん。

こんな指定もあったわ。

  • 「数字!」に「-1」
aaaa
bbbb
cccc



項目数は:6
むう?同じ?

なぜ?と思って先ほどのリンク先見ると
n がゼロ未満の場合、パターンは可能な限り多く適用され、配列は任意の長さを保持できます。
だって。
なるほど。あるだけ確保なのね。

ちなみに「数字!」に「0」を入れるとsplit(String)と同じことになります。つまり最後の空白は削除。


split(String,int)。これいいですね。intつけちゃいましょうそうしましょう。


関連

java.util.StringTokenizer
とーくないざー
トークン(分割)してくれます。
こっちのほうがいいかな。