Java の文字列を特定の文字で分割する「split()」の基本
新人
「Java で文字列を特定の文字で分割する方法はありますか?」
先輩
「Java では split() メソッドを使うことで、指定した文字を区切りにして文字列を分割できるよ。」
新人
「具体的にはどうやって使うんですか?」
先輩
「それじゃあ、基本的な使い方を見ていこう!」
1. split() メソッドとは?(基本的な説明)
split() メソッドは、指定した区切り文字(デリミタ)で文字列を分割し、配列として取得するメソッドです。
split() の基本的な特徴
- 引数に指定した文字で文字列を分割する
- 分割後の各部分は配列として取得できる
- 空白やカンマなど、好きな文字を区切りとして使える
例えば、CSV(カンマ区切りのデータ)を処理するときなどに便利です。
2. split() を使った基本的な文字列の分割
まずは、基本的な split() の使い方を見てみましょう。
カンマで区切られた文字列を分割する
public class SplitExample {
public static void main(String[] args) {
String text = "りんご,バナナ,オレンジ";
String[] fruits = text.split(",");
for (String fruit : fruits) {
System.out.println(fruit);
}
}
}
りんご
バナナ
オレンジ
コードの解説
String text = "りんご,バナナ,オレンジ";… カンマ区切りの文字列を用意text.split(",");… カンマ(,)を区切り文字として分割- 配列
fruitsに分割された文字列が格納される for文で配列を順番に取り出して出力
このように split() を使えば、簡単に文字列を分割することができます。
3. 複数の区切り文字を使った split() の使い方
split() メソッドは、正規表現を使うことで複数の区切り文字で文字列を分割することができます。
カンマやスペースで分割する
例えば、カンマ(,)やスペース( )のどちらかで区切られた文字列を分割するには、以下のように記述します。
public class SplitMultipleDelimiters {
public static void main(String[] args) {
String text = "りんご, バナナ オレンジ";
String[] fruits = text.split("[, ]+");
for (String fruit : fruits) {
System.out.println(fruit);
}
}
}
りんご
バナナ
オレンジ
コードの解説
split("[, ]+");… カンマ(,)またはスペース()を区切り文字として指定- 正規表現の
[, ]+により、複数の区切り文字が連続しても正しく分割される - 出力結果では「りんご」「バナナ」「オレンジ」の3つに分割される
このように split() を使えば、異なる区切り文字をまとめて処理することができます。
4. split() で得られた配列の扱い方
split() を使うと、分割した文字列は配列(String[])として取得できます。この配列を使って処理を行う方法を見てみましょう。
配列の要素数を確認する
public class SplitArrayExample {
public static void main(String[] args) {
String text = "A-B-C-D";
String[] parts = text.split("-");
System.out.println("要素の数: " + parts.length);
}
}
要素の数: 4
コードの解説
split("-")を使ってハイフン(-)で文字列を分割- 配列
partsに分割された文字列が格納される parts.lengthを使って要素の数を確認
このように split() で得られた配列は、通常の配列と同じように扱うことができます。
5. split() の正規表現の活用
split() では、正規表現を活用することで、より柔軟に文字列を分割することが可能です。
数字と文字を分割する
例えば、数字とアルファベットが混在した文字列を分割する場合、以下のように記述できます。
public class SplitWithRegex {
public static void main(String[] args) {
String text = "A1B2C3D4";
String[] result = text.split("\\d+");
for (String str : result) {
System.out.println(str);
}
}
}
A
B
C
D
コードの解説
split("\\d+")… 数字(\d+)を区切り文字として分割- 結果として「A」「B」「C」「D」に分割される
このように、正規表現を使えば、特定のパターンに基づいて文字列を分割することができます。
6. split() を使った実践的なサンプルコード
ここでは、split() を活用した実践的なサンプルコードを紹介します。
CSVデータの分割と整形
カンマ区切りのCSVデータを split() を使って分割し、それぞれの値を整形して表示する例です。
public class CSVParser {
public static void main(String[] args) {
String csv = "1001,田中,30,東京";
String[] data = csv.split(",");
System.out.println("ID: " + data[0]);
System.out.println("名前: " + data[1]);
System.out.println("年齢: " + data[2]);
System.out.println("住所: " + data[3]);
}
}
ID: 1001
名前: 田中
年齢: 30
住所: 東京
コードの解説
- CSV形式のデータをカンマ(
,)で分割 - 配列
dataに各要素を格納 - それぞれの値を適切なラベルをつけて表示
このように、split() を使うことで、CSVデータを簡単に処理できます。
7. split() と StringTokenizer の違い
Java には、文字列を区切り文字で分割するもう一つの方法として StringTokenizer クラスがあります。split() メソッドとの違いを見てみましょう。
split() の特徴
- 正規表現を利用できる
- 配列で結果を取得する
- 複数の区切り文字やパターンを指定できる
StringTokenizer の特徴
- 一つの区切り文字しか指定できない
- 配列ではなく、トークンを1つずつ取得する
- メモリ効率が良い(配列を作成しない)
StringTokenizer の使用例
import java.util.StringTokenizer;
public class StringTokenizerExample {
public static void main(String[] args) {
String text = "A-B-C-D";
StringTokenizer tokenizer = new StringTokenizer(text, "-");
while (tokenizer.hasMoreTokens()) {
System.out.println(tokenizer.nextToken());
}
}
}
A
B
C
D
どちらを使うべきか?
- 柔軟な処理が必要なら
split()を使う - パフォーマンスを重視する場合は
StringTokenizerを使う
ただし、現在の Java では split() の方が一般的に使用されます。
8. 練習問題:「split()」を使ったプログラムを作ろう
最後に、split() を使ったプログラムを実際に書いてみましょう。
問題
以下のデータを split() で分割し、それぞれの情報を出力するプログラムを作成してください。
入力データ:
2024-04-01|田中|30歳|東京
出力例:
日付: 2024-04-01
名前: 田中
年齢: 30歳
住所: 東京
解答例
public class SplitPractice {
public static void main(String[] args) {
String data = "2024-04-01|田中|30歳|東京";
String[] details = data.split("\\|");
System.out.println("日付: " + details[0]);
System.out.println("名前: " + details[1]);
System.out.println("年齢: " + details[2]);
System.out.println("住所: " + details[3]);
}
}
日付: 2024-04-01
名前: 田中
年齢: 30歳
住所: 東京
ポイント
- データを
"|"で区切るため、正規表現の\\|を使用 - 分割したデータを配列に格納し、それぞれ出力
このように、split() を活用することで、簡単にデータを分割して処理できます。