Java で文字列を分割する方法
このチュートリアルでは、Java で文字列を分割する方法について説明します。
Java の String は、非プリミティブなデータ型の一つで、文字列を格納するために使用されます。文字列変数は以下のように簡単に宣言することができます。
String string = "I am a string";
String string1 = "I am another string";
何を実現しようとしているかによっては、いくつかの文字列処理を行う必要があるかもしれません。ここでは、カンマで区切られた CSV 形式のデータを表す文字列がある場合を考えてみましょう。
String data = "Apple,Banana,Orange,Peach";
そのため、次のような出力を得るために、カンマに基づいて文字列を分割してデータを分離する必要があります。
> Apple
> Banana
> Orange
> Peach
Java Strings にはデフォルトでスプリット関数 String#split() があり、これは入力として正規表現を受け取り、与えられた入力に対してスプリットした後、結果として得られる文字列の配列を返します。
以下の例は、このメソッドを使って Java で与えられた文字列を分割する方法を示しています。
public class Main {
public static void main(String args[]) {
String data = "Apple,Banana,Orange,Peach";
String[] splitted = data.split(",");
for (int i = 0; i < splitted.length; i++) {
System.out.println(splitted[i]);
}
}
}
上記のコードは以下のように出力しています。
Apple
Banana
Orange
Peach
このメソッドを使って、別のパラメータで文字列を分割する方法を試してみましょう。
ドットで分割
今回はこんな感じの文字列です。"One.Two.Three.Four"です。これをもう一度同じ方法で分割してみましょう。
public class Main {
public static void main(String args[]) {
String data = "One.Two.Three.Four";
String[] splitted = data.split(".");
for (int i = 0; i < splitted.length; i++) {
System.out.println(splitted[i]);
}
}
}
上のコードでは何も出力されません。このとき、split 関数は 正規表現 のパターンを入力として受け取ることを覚えておいてほしい。そのため、特殊な文字で分割したい場合には特別な対策が必要です。
ありには 12 個の特殊な意味を持つ文字があります。
- バックスラッシュ
\ - キャレット
^ - ドル記号
$ - ピリオドまたはドット
. - 垂直バーまたはパイプ記号
| - 疑問符
? - アスタリスクまたはスター
* - プラス記号
+ - 左括弧
( - 閉じ括弧
) - 左角括弧
[ - 開始中括弧
{
これらの特殊文字はしばしばメタキャラクタと呼ばれます。
上記のいずれかの文字で文字列を分割したい場合は、バックスラッシュ \ を使用して特殊文字をエスケープすることができます。
public class Main {
public static void main(String args[]) {
String data = "One.Two.Three.Four";
String[] splitted = data.split("\\.");
for (int i = 0; i < splitted.length; i++) {
System.out.println(splitted[i]);
}
}
}
これで正しく出力されるようになりました。
One
Two
Three
Four
もう一例を試してみましょう。
文字列で分割
今回は、"OneFruitTwoFruitThreeFruit" のような文字列があります。同じメソッドをもう一度使用して、文字列 Fruit に基づいて分割します。
public class Main {
public static void main(String args[]) {
String data = "OneFruitTwoFruitThreeFruit";
String[] splitted = data.split("Fruit");
for (int i = 0; i < splitted.length; i++) {
System.out.println(splitted[i]);
}
}
}
上のコードの出力は次のようになります。
One
Two
Three
これで、Java で文字列を任意のパラメータで分割する方法がわかりました。