Java で文字列を分割する方法

Hassan Saeed 2023年12月11日
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 で文字列を任意のパラメータで分割する方法がわかりました。

関連記事 - Java String