Java split 文字列を分割して配列にする

概要 splitとは(文字列を分割して配列にする)
区切り文字  カンマで区切る
  半角スペースで区切る
  タブで区切る
  スラッシュで区切る
  改行で区切る
  ドットで区切る
  空文字で区切る(1文字ずつ配列にする)
  末尾が区切り文字の時、最後は要素になる?
正規表現 正規表現で区切り文字をORで指定
2つ目の引数  取得する要素数を指定
list 文字列をsplitで分割してリストにする

splitとは(文字列を分割して配列にする)

public String[ ] split(String regex)

カンマで区切る

public class Test1 {
	public static void main(String[] args) {
		String str1 = "a,b,c";

		String arr1[] = str1.split(",");
		for (String a : arr1) {
			System.out.println(a); //a b c
		}
		System.out.println(arr1.length);//3
 	}
}

splitメソッドで文字列をカンマで区切って配列にしています。

半角スペースで区切る

public class Test1 {
	public static void main(String[] args) {
		String str1 = "a b c";

		String arr1[] = str1.split(" ");
		for (String a : arr1) {
			System.out.println(a); //a b c
		}
		System.out.println(arr1.length);//3
 	}
}

splitメソッドで文字列を半角スペースで区切って配列にしています。

タブで区切る

public class Test1 {
	public static void main(String[] args) {
		String str1 = "a	b	c";

		String arr1[] = str1.split("\t");
		for (String a : arr1) {
			System.out.println(a); //a b c
		}
		System.out.println(arr1.length);//3
 	}
}

splitメソッドで文字列をタブで区切って配列にしています。

スラッシュで区切る

public class Test1 {
	public static void main(String[] args) {
		String str1 = "2020/05/21";

		String arr1[] = str1.split("\\/");
		for (String a : arr1) {
			System.out.println(a); //2020 05 21
		}
		System.out.println(arr1.length);//3
 	}
}

3行目は、年月日をスラッシュで区切っています。
5行目は、スラッシュで区切って配列にしています。
バックスラッシュ2つでバックスラッシュのエスケープシーケンスを表します。

改行で区切る

public class Test1 {
	public static void main(String[] args) {
		String str1 = "赤と黄\r\n青と緑";

		String arr1[] = str1.split("\r\n|\n");
		for (String a : arr1) {
			System.out.println(a); //赤と黄 青と緑
		}
		System.out.println(arr1.length);//2
 	}
}

\r\nは復帰改行(CRLF)、\nは改行(LF)です。パイプ(|)は正規表現でorを意味します。

ドットで区切る

public class Test1 {
	public static void main(String[] args) {
		String str = "test.txt";

		String arr[] = str.split("\\.");
		for (String a : arr) {
			System.out.println(a); //test txt
		}
 	}
}

正規表現のドットではなく、文字としてのドットを表すため\でエスケープを行います。

空文字で区切る(1文字ずつ配列にする)

public class Test1 {
	public static void main(String[] args) {
		String str1 = "abc";

		String arr1[] = str1.split("");
		for (String a : arr1) {
			System.out.println(a); //a b c
		}
		System.out.println(arr1.length); // 3
 	}
}

3行目の文字列は、区切り文字がありません。
splitメソッドの引数は空文字です。その場合1文字ずつ配列になります。

末尾が区切り文字の時、最後は要素になる?

package test1;
public class Test1 {
	public static void main(String[] args) {
		String str1 = "a,b,c,";
		String array1[] = str1.split(",");
		System.out.println(array1.length); // 3

		String array2[] = str1.split(",",-1);
		System.out.println(array2.length); // 4

		String str2 = "a,b,c,,";
		String array3[] = str2.split(",");
		System.out.println(array3.length); // 3
		
		String array4[] = str2.split(",",-1);
		System.out.println(array4.length); // 5
		
		String str3 = "a,,c";
		String array5[] = str3.split(",");
		System.out.println(array5.length); // 3
 	}
}

4,11行目の文字列は、末尾がカンマで終わっています。
5行目は区切り文字にカンマを指定していますが要素は3つになります。
空文字も要素として取得する場合は8行目のように2つめの引数を負の数(例:-1)にします。

正規表現で区切り文字をORで指定

正規表現で区切り文字をコロン(:)とカンマ(,)にします。

public class Test1 {
	public static void main(String[] args) {
		String str1 = "1:a,2:b,3:c";

		String arr1[] = str1.split("[,:]");
		for (String a : arr1) {
			System.out.println(a); //1 a 2 b 3 c
		}
		System.out.println(arr1.length);//6
 	}
}

[,:]は、カンマ(,)またはコロン(:)という正規表現です。

正規表現の一覧表

取得する要素数を指定

public String[ ] split(String regex,int 要素数) 

2つ目の引数は戻り値の配列の要素数の上限になります。

public class Test1 {
	public static void main(String[] args) {
		String str1 = "a,b,c,d,e,f,g";
		
		String arr1[] = str1.split(",",3);
		for (String a : arr1) {
			System.out.println(a); //「a」「b」「c,d,e,f,g」
		}
		System.out.println(arr1.length); // 3
 	}
}

splitメソッドの2つ目の引数が3です。戻りの配列の要素数は3つになります。

文字列をsplitで分割してリストにする

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Test1 {
	public static void main(String[] args) {
        List<String> list1 = new ArrayList<>(); // リストを作成
		String str1 = "a,b,c";

		String array1[] = str1.split(",");
        Collections.addAll(list1, array1); //配列からリストを作成
		for (String a : list1) {
			System.out.println(a); //a b c
		}
 	}
}

10行目は、splitメソッドで文字列を配列にしています。
11行目は、CollectionクラスのaddAllメソッドで配列からリストを作成しています。

関連の記事

Java substring 文字列を切り出す
Java replace 文字列を置換するサンプル

△上に戻る