Javaで文字列を分割するにはStringクラスのsplitメソッドを使う。
このページではsplitクラスの使い方をすぐにわかるようにまとめた。分割数を制限する方法や注意点などもまとめているため参考にしていただければと思う。
目次
文字列を分割する(split)
splitメソッド
文字列.split(String regrex )
regrex:正規表現一致
戻り値の型 |
String[] |
内容 |
この文字列を指定した正規表現に一致する位置で分割する。 |
split(String regrex)は、文字列をregrexで指定された正規表現に一致するところで分割し、String型の配列として返すメソッドだ。csvファイルというカンマ区切りの文字列からなるファイルを操作するときなど、よく使われるメソッドだ。
※正規表現とは文字列のパターンを表す表現方法だ。 通常の文字(a~z)と特殊文字でそのパターンを表現している。そのパターンを用いることによって「数字に一致する」など複雑な条件にすることもできる。
サンプルコード
1 2 3 4 5 6 7 8 9 10 11 |
public class StringSample10 { public static void main(String[] args) { String message ; message = "赤1青2黄色3白5緑" ";//[1] String[] resultArray = message.split("[0-9]");//[2] for (int i = 0; i < resultArray.length; i++) {//[3] System.out.println(resultArray[i]);//[4] } } } |
実行結果
1 2 3 4 5 6 |
赤 青 黄色 白 緑 黒 |
サンプルコードの説明
- [1] String型の変数messageの初期化。
- [2] 変数messageをsplit()メソッドを使い0から9の数字に一致したところで分割しresultArrayに代入。
- [3] 配列resultArrayをfor文で要素の数だけ繰り返す。
- [4] 配列resultArrayに代入されている値を出力。
文字列の数を指定したいとき
limitが使える。
split(String regrex ,int limit)
戻り値の型 |
String[] |
内容 |
この文字列を指定した正規表現に一致する位置で分割する。 |
split(String regrex, int limit)は、文字列をregrexで指定された正規表現に一致するところで分割する。文字列の分割はlimitで指定された回数-1になるまで行われる。
つまり、返されるString型の配列の要素数はlimitで指定された数より多くなることがなくなる。
サンプルコード
1 2 3 4 5 6 7 8 9 10 11 12 |
public class StringSample11 { public static void main(String[] args) { String message ; message = "赤、青、黄色、白、緑、黒";//[1] String[] resultArray = message.split("、",3);//[2] for (int i = 0; i < resultArray.length; i++) {//[3] System.out.println(resultArray[i]);//[4] } } } |
実行結果
1 2 3 |
赤 青 黄色、白、緑、黒 |
サンプルコードの説明
- [1] String型の変数messageの初期化。
- [2] 変数messageをsplit()メソッドを使い「、」に一致したところで2回まで分割しresultArrayに代入。
- [3] 配列resultArrayをfor文で要素の数だけ繰り返す。
-
[4] 配列resultArrayに代入されている値を出力。
正規表現で区切るときの注意
splitメソッドの引数String regrexには正規表現のパターンを指定できる。このとき気をつけてほしいのが特別な意味を持つ文字で区切りたいと思う場合だ。
たとえば、ドット(.)は正規表現では「任意の文字」という意味をもつ。
そのため、ドットのみを引数で指定してもドットで分割した結果は返ってこない。
このような正規表現で使う特別な意味を持った文字を単なる文字として扱いたい場合には
「エスケープ処理」が必要となる。
ドットの場合は「¥¥」を入れることで単なる文字として扱われるようになる。
では、サンプルコードで確認しよう。
サンプルコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
public class StringSample10 { public static void main(String[] args) { String message ; message = "aaa.bbb.ccc.ddd";//[1] String[] resultArray1 = message.split(".");//[2] String[] resultArray2 = message.split("\\.");//[3] System.out.println("エスケープ処理をしなかった場合の分割数:" + resultArray1.length); //[4] System.out.println("エスケープ処理をした場合の分割数:" +resultArray2.length); [5] for (int i = 0; i < resultArray1.length; i++) {//[6] System.out.println(resultArray1[i]);//[7] } for (int i = 0; i < resultArray2.length; i++) {//[8] System.out.println(resultArray2[i]);//[9] } } } |
実行結果
1 2 3 4 5 6 |
エスケープ処理をしなかった場合の分割数:0 エスケープ処理をした場合の分割数:4 aaa bbb ccc ddd |
サンプルコードの説明
- [1] 変数messageに「bbb.ccc.ddd」を代入。
- [2] 変数messageをsplit()メソッドを使い「.」で一致したところで分割しresultArray1に代入。
- [3] 変数messageをsplit()メソッドを使いエスケープした「\\.」で一致したところで分割しresultArray2に代入。
- [4]resultArray1の配列の要素数(→分割された数)を出力。
- [5]resultArray2の配列の要素数(→分割された数)を出力。
- [6] 配列resultArray1をfor文で要素の数だけ繰り返す。
- [7] 配列resultArray1に代入されている値を出力。
- [8] 配列resultArray2をfor文で要素の数だけ繰り返す。
- [9] 配列resultArray3に代入されている値を出力。
まとめ
このページではJavaで文字列を分割するために使うsplitについてまとめた。
ただ、分割するだけでなく、分割数を制限することなども可能だ。ぜひ参考にしていただければと思う。