こんにちは!フリーランスのオータケです。
Javaで特定の文字を使って文字列を分割したいと思ったことがありませんか?
splitメソッドを使うことで実現できます。この記事では、splitメソッドの使い方について
- splitメソッドとは
- splitメソッドの使い方
- splitの区切り文字を指定
という基本的な内容から
- 分割した結果をListで受け取る方法
- 正規表現を用いる方法
- splitの使用上の注意点
など具体的な内容についても解説していきます。
今回は文字列をint型に変換する方法について、使い方をわかりやすく解説します!
なお、Javaの記事については、こちらにまとめています。
splitメソッドとは
splitメソッドは、対象となる文字列を指定した区切り文字によって分割し、それぞれを配列の要素として格納します。
splitメソッドは次のように記述します。
String型変数名.split("区切り文字", 分割後の要素数)
第1引数の区切り文字は、正規表現で指定します。正規表現については後ほど詳しく解説します。
第2引数の分割後の要素数は省略することも可能です。省略した場合は、配列の要素数は制限されません。また、配列の終わりの空の文字列がある場合には破棄されます。
第2引数がゼロより大きい場合、配列の要素数は指定した引数の値以下になります。第2引数が負の値の場合には、配列の要素数は制限されず、配列の終わりの空の文字列は削除されません。
第2引数がゼロの場合は省略したときと同様に、配列の要素数は制限されずに、後続の空の文字列は破棄されます。
splitメソッドの使い方
ここではsplitメソッドで区切り文字を指定して、文字列を分割する方法を解説します!
splitメソッドで文字列を分割する方法を次のプログラムで確認してみましょう!
public class Main { public static void main(String[] args) { String str = "apple,orange,melon"; System.out.println("str: " + str); String[] fruits = str.split(","); for (String fruit : fruits) { System.out.println(fruit); } } }
実行結果:
str: apple,orange,melon apple orange melon
ここでは文字列をカンマで区切って配列に分割しています。これでsplitメソッドで文字列を分割することができました!
末尾の空文字(“”)の要素を除外しない方法
ここではsplitメソッドで文字列を分割するときに、末尾の空の要素を削除しない方法を解説します!
末尾の空の要素を削除しないようにするには、splitメソッドの第2引数に負の値の”-1”などを指定します。splitメソッドで末尾の空の要素を削除しない方法を次のプログラムで確認してみましょう!
public class Main { public static void main(String[] args) { String str = "apple,orange,melon,,"; System.out.println("str: " + str); String[] fruits = str.split(",", 0); for (String fruit : fruits) { System.out.println(fruit); } System.out.println("配列のサイズ:" + fruits.length); String[] fruits2 = str.split(",", -1); for (String fruit : fruits2) { System.out.println(fruit); } System.out.println("配列のサイズ:" + fruits2.length); } }
実行結果:
str: apple,orange,melon,, apple orange melon 配列のサイズ:3 apple orange melon 配列のサイズ:5
2度目の分割では、splitメソッドの第2引数に負の値の”-1”を指定しているため、末尾の空文字の要素が削除されずに残っています。
これでsplitメソッドで末尾の空文字(“”)の要素を除外せずに文字列を分割することができました!
splitの区切り文字を指定するサンプルコード
ここでは、splitメソッドを実際に使用する際の参考になるように、様々な区切り文字を指定するサンプルコードを解説していきます。
改行コードで分割
改行コードで文字分割を行う場合は引数に「\n」を指定してあげましょう。
public class Main { public static void main(String[] args) { String str = "apple\norange\nmelon"; System.out.println(str); String[] fruits = str.split("\n"); for (String fruit : fruits) { System.out.println(fruit); } } }
実行結果:
apple orange melon apple orange melon
タブで分割
タブ文字で分割を行う場合は引数に「\t」を指定してあげましょう。
public class Main { public static void main(String[] args) { String str = "apple\torange\tmelon"; System.out.println("str: " + str); String[] fruits = str.split("\t"); for (String fruit : fruits) { System.out.println(fruit); } } }
実行結果:
str: apple orange melon apple orange melon
空白で分割
空白(半角スペース)で分割を行う場合は、正規表現を使わなければ、そのまま半角スペースを引数に渡してあげるといいでしょう。
public class Main { public static void main(String[] args) { String str = "apple orange melon"; System.out.println("str: " + str); String[] fruits = str.split(" "); for (String fruit : fruits) { System.out.println(fruit); } } }
実行結果:
str: apple orange melon apple orange melon
ピリオドで分割
ピリオドで分割を行う場合は、引数に「.」を指定してあげても上手くいきません。
これはsplitメソッドの第1引数は、正確には正規表現で指定するからです。正規表現で「.」は「何か1文字」を表します。このままではピリオドとして扱われないために、「.」として指定します。
なお、正規表現については後ほど詳しく説明します。
public class Main { public static void main(String[] args) { String str = "apple.orange.melon"; System.out.println("str: " + str); String[] fruits = str.split("."); for (String fruit : fruits) { System.out.println(fruit); } } }
実行結果:
str: apple.orange.melon apple orange melon
カンマで分割
ピリオドで分割を行う場合は引数に「,」を指定してあげましょう。
public class Main { public static void main(String[] args) { String str = "apple,orange,melon"; System.out.println("str: " + str); String[] fruits = str.split(","); for (String fruit : fruits) { System.out.println(fruit); } } }
実行結果:
str: apple,orange,melon apple orange melon
分割した結果をListで受け取る方法
文字列を分割しその結果をListで受け取りたい場合は、splitメソッドを使用後にasListを使って変換することで実現できます。
import java.util.Arrays; import java.util.List; public class Main { public static void main(String[] args) { String str = "apple,orange,melon"; System.out.println("str: " + str); List<String> fruits = Arrays.asList(str.split(",")); System.out.println(fruits); } }
実行結果:
str: apple,orange,melon [apple, orange, melon]
正規表現を用いる方法
先ほども少し述べましたが、splitメソッドの第1引数は正確には正規表現を指定します。
正規表現を使って文字列を分割してみましょう。
import java.util.Arrays; import java.util.List; public class Main { public static void main(String[] args) { String str = "apple,orange,melon"; System.out.println("str: " + str); // ","で始まり任意の文字が0回以上繰り返された後で","が出現する List<String> fruits = Arrays.asList(str.split(",.*,")); System.out.println(fruits); } }
実行結果:
str: apple,orange,melon [apple, melon]
このサンプルコードでは、正規表現で使われる文字「.」、「*」で指定しています。
Javaの正規表現については次の記事がオススメです!
引数に空文字を指定して1文字ずつ分割
引数に空文字を指定すると、1文字ずつ分割されます。
import java.util.Arrays; import java.util.List; public class Main { public static void main(String[] args) { String str = "apple,orange,melon"; System.out.println("str: " + str); List<String> fruits = Arrays.asList(str.split("")); System.out.println(fruits); } }
実行結果:
str: apple,orange,melon [a, p, p, l, e, ,, o, r, a, n, g, e, ,, m, e, l, o, n]
対象文字列がnullの場合の注意点
splitメソッドは対象となる文字列がnullの場合、例外NullPointerException が発生します。
try-catch文で例外処理を行うか、使用する前にチェックすることをオススメします。
import java.util.Arrays; import java.util.List; public class Main { public static void main(String[] args) { String str = null; System.out.println("str: " + str); if(str != null) { List<String> fruits = Arrays.asList(str.split("")); System.out.println(fruits); } else { System.out.println("文字列はnullです"); } } }
実行結果:
str: null 文字列はnullです
String型のnullチェックをする方法については、こちらで詳しく解説していますのでぜひ参考にして下さい。
また、Java8の新機能Optionalでのnullチェックができます。
こちらで詳しく解説していますのでぜひ参考にして下さい。
まとめ
いかがでしたか?文字を分割するにはsplitメソッドを使うことで簡単に分割することができました。
そして分割した文字列をListで受け取りたい場合はasListを使うことも覚えておきましょう!