Java で区切り文字を使って文字列を ArrayList に分割する方法

JavaBeginner
オンラインで実践に進む

はじめに

Java プログラミングにおいて、文字列の操作や、ArrayList のようなコレクションの利用は不可欠なスキルです。このチュートリアルでは、Java で区切り文字を使用して文字列を ArrayList に分割するプロセスを解説します。この実験(Lab)の終わりには、テキストデータを扱いやすい部分に分解し、柔軟なコレクションに格納する方法を理解できるようになります。これにより、Java アプリケーションで様々なデータ処理タスクに取り組むことが可能になります。

Java における文字列と ArrayList の理解

文字列の分割に入る前に、この実験(Lab)で扱う 2 つの主要なコンポーネントについて理解しておきましょう。

Java における文字列

Java における String は、文字のシーケンスです。Java プログラミングで最も一般的に使用されるクラスの 1 つです。文字列はイミュータブル(immutable)であり、一度作成されると、その値を変更することはできません。

例:

String greeting = "Hello, World!";

Java における ArrayList

ArrayList は、Java におけるサイズ変更可能な配列の実装です。固定サイズの通常の配列とは異なり、ArrayList は動的に拡張または縮小できます。これらは Java Collections Framework の一部であり、格納された要素を操作するためのさまざまなメソッドを提供します。

ArrayList を使用するには、java.utilパッケージからインポートする必要があります。

import java.util.ArrayList;

ArrayList の作成:

ArrayList<String> fruits = new ArrayList<>();
fruits.add("Apple");
fruits.add("Banana");

それでは、これらの概念を使い始めるために、新しい Java ファイルを作成しましょう。以下の手順に従ってください。

  1. LabEx 環境で WebIDE を開きます
  2. プロジェクトディレクトリに移動します(デフォルトで開いているはずです)
  3. エディタの「New File」アイコンをクリックして、StringSplitDemo.javaという名前の新しいファイルを作成します
  4. 以下の基本的なコードを追加して、シンプルな Java クラスを作成します。
public class StringSplitDemo {
    public static void main(String[] args) {
        // We will add our code here
        System.out.println("String Split Demo");
    }
}
  1. Ctrl+S を押してファイルを保存します
  2. IDE でターミナルを開き(まだ開いていない場合)、Java ファイルをコンパイルします。
javac StringSplitDemo.java
  1. プログラムを実行します。
java StringSplitDemo

次のような出力が表示されるはずです。

String Split Demo

これにより、基本的な Java のセットアップが正しく機能していることが確認できます。次のステップでは、split()メソッドを使用して文字列を分割する方法を学びます。

split() メソッドを使用した文字列の分割

Java には、文字列を区切り文字に基づいて分割できるsplit()という String クラスの組み込みメソッドが用意されています。このメソッドは、区切り文字で分割された部分文字列を含む文字列の配列を返します。

split() メソッド

split()メソッドは、正規表現(regular expression)をパラメータとして受け取り、部分文字列の配列を返します。

String[] split(String regex)

文字列を分割するコードを含めるために、StringSplitDemo.javaファイルを変更しましょう。エディタでファイルを開き、以下のように更新します。

public class StringSplitDemo {
    public static void main(String[] args) {
        // Create a string with comma-separated values
        String csvData = "apple,banana,orange,grape,mango";
        System.out.println("Original string: " + csvData);

        // Split the string using comma as delimiter
        String[] fruits = csvData.split(",");

        // Print the resulting array
        System.out.println("\nAfter splitting:");
        System.out.println("Number of elements: " + fruits.length);

        // Display each element of the array
        for (int i = 0; i < fruits.length; i++) {
            System.out.println("Element " + i + ": " + fruits[i]);
        }
    }
}

ファイルを保存し、プログラムを実行します。

javac StringSplitDemo.java
java StringSplitDemo

次のような出力が表示されるはずです。

Original string: apple,banana,orange,grape,mango

After splitting:
Number of elements: 5
Element 0: apple
Element 1: banana
Element 2: orange
Element 3: grape
Element 4: mango

これは、split()メソッドが元の文字列を各カンマで分割し、各部分文字列を配列に配置する方法を示しています。配列fruitsには、元のカンマ区切りの文字列から各果物の名前を表す 5 つの要素が含まれるようになりました。

次のステップでは、この配列を ArrayList に変換し、データの操作をより柔軟にします。

分割された文字列の ArrayList への変換

文字列を配列に分割したので、それを ArrayList に変換しましょう。ArrayList は、動的なサイズ変更や、要素の追加、削除、操作に便利なメソッドなど、配列よりも柔軟性を提供します。

配列から ArrayList への変換

Java で配列を ArrayList に変換する方法はいくつかあります。

  1. Arrays.asList()と ArrayList コンストラクタを使用する
  2. ループを使用して各要素を個別に加える
  3. Java 8 Stream API を使用する

StringSplitDemo.javaファイルを更新して、ArrayList への変換を含めましょう。java.utilパッケージから必要なクラスをインポートする必要があります。

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class StringSplitDemo {
    public static void main(String[] args) {
        // Create a string with comma-separated values
        String csvData = "apple,banana,orange,grape,mango";
        System.out.println("Original string: " + csvData);

        // Split the string using comma as delimiter
        String[] fruits = csvData.split(",");

        // Print the resulting array
        System.out.println("\nAfter splitting into array:");
        System.out.println("Number of elements: " + fruits.length);

        // Display each element of the array
        for (int i = 0; i < fruits.length; i++) {
            System.out.println("Array Element " + i + ": " + fruits[i]);
        }

        // Method 1: Convert to ArrayList using Arrays.asList() and the ArrayList constructor
        ArrayList<String> fruitList1 = new ArrayList<>(Arrays.asList(fruits));

        // Method 2: Convert to ArrayList using a loop
        ArrayList<String> fruitList2 = new ArrayList<>();
        for (String fruit : fruits) {
            fruitList2.add(fruit);
        }

        // Display the ArrayList created using Method 1
        System.out.println("\nAfter converting to ArrayList (Method 1):");
        System.out.println("Number of elements: " + fruitList1.size());

        for (int i = 0; i < fruitList1.size(); i++) {
            System.out.println("ArrayList Element " + i + ": " + fruitList1.get(i));
        }

        // Demonstrate adding a new element to the ArrayList
        fruitList1.add("pineapple");
        System.out.println("\nAfter adding a new element to ArrayList:");
        System.out.println("Number of elements: " + fruitList1.size());
        System.out.println("New element: " + fruitList1.get(fruitList1.size() - 1));
    }
}

ファイルを保存し、プログラムを実行します。

javac StringSplitDemo.java
java StringSplitDemo

次のような出力が表示されるはずです。

Original string: apple,banana,orange,grape,mango

After splitting into array:
Number of elements: 5
Array Element 0: apple
Array Element 1: banana
Array Element 2: orange
Array Element 3: grape
Array Element 4: mango

After converting to ArrayList (Method 1):
Number of elements: 5
ArrayList Element 0: apple
ArrayList Element 1: banana
ArrayList Element 2: orange
ArrayList Element 3: grape
ArrayList Element 4: mango

After adding a new element to ArrayList:
Number of elements: 6
New element: pineapple

この例では、文字列配列を ArrayList に変換する方法を示し、ArrayList を使用する利点の 1 つである、コレクションに新しい要素を簡単に追加できることを示しています。

配列と ArrayList の違いに注意してください。

  • 配列は固定サイズですが、ArrayList は動的に拡張できます
  • ArrayList は、要素を操作するためのadd()remove()get()などのメソッドを提供します
  • ArrayList はオブジェクトのみを格納でき、プリミティブ型は格納できません(ただし、Java はオートボクシングを使用して自動的に変換を処理します)

次のステップでは、文字列を分割するためのさまざまな区切り文字を調べます。

さまざまな区切り文字の操作

前のステップでは、文字列を分割するためにカンマを区切り文字として使用しました。ただし、split()メソッドは、任意の正規表現(regular expression)を区切り文字として受け入れるため、さまざまなパターンに基づいて文字列を分割できます。

さまざまな区切り文字を試すために、新しい Java ファイルを作成しましょう。DelimiterDemo.javaという名前のファイルを作成し、次の内容を記述します。

import java.util.ArrayList;
import java.util.Arrays;

public class DelimiterDemo {
    public static void main(String[] args) {
        // 1. Splitting by a single character
        String commaString = "red,green,blue,yellow";
        ArrayList<String> colors = new ArrayList<>(Arrays.asList(commaString.split(",")));

        System.out.println("1. Splitting by comma:");
        for (String color : colors) {
            System.out.println("  " + color);
        }

        // 2. Splitting by space
        String spaceString = "Java Python C++ JavaScript Ruby";
        ArrayList<String> languages = new ArrayList<>(Arrays.asList(spaceString.split(" ")));

        System.out.println("\n2. Splitting by space:");
        for (String language : languages) {
            System.out.println("  " + language);
        }

        // 3. Splitting by multiple characters
        String pipeColonString = "name|John:age|30:city|New York";
        ArrayList<String> personData = new ArrayList<>(Arrays.asList(pipeColonString.split("[|:]")));

        System.out.println("\n3. Splitting by multiple characters (| or :):");
        for (String data : personData) {
            System.out.println("  " + data);
        }

        // 4. Splitting by digits
        String digitsString = "apple123banana456cherry";
        ArrayList<String> fruits = new ArrayList<>(Arrays.asList(digitsString.split("\\d+")));

        System.out.println("\n4. Splitting by digits:");
        for (String fruit : fruits) {
            System.out.println("  " + fruit);
        }

        // 5. Limiting the number of splits
        String limitString = "one-two-three-four-five";
        ArrayList<String> limitedParts = new ArrayList<>(Arrays.asList(limitString.split("-", 3)));

        System.out.println("\n5. Limiting the number of splits (limit=3):");
        for (String part : limitedParts) {
            System.out.println("  " + part);
        }
    }
}

ファイルを保存し、プログラムを実行します。

javac DelimiterDemo.java
java DelimiterDemo

次のような出力が表示されるはずです。

1. Splitting by comma:
  red
  green
  blue
  yellow

2. Splitting by space:
  Java
  Python
  C++
  JavaScript
  Ruby

3. Splitting by multiple characters (| or :):
  name
  John
  age
  30
  city
  New York

4. Splitting by digits:
  apple
  banana
  cherry

5. Limiting the number of splits (limit=3):
  one
  two
  three-four-five

さまざまな区切り文字の種類の理解

  1. 単一文字区切り文字: カンマやスペースなど、最も単純な形式です。

    string.split(",")
  2. 文字クラス区切り文字: セット内の任意の文字で分割します。

    string.split("[|:]")  // '|'または':'のいずれかで分割
  3. 正規表現区切り文字: より複雑なパターン用です。

    string.split("\\d+")  // 1 つ以上の数字で分割
  4. 分割の制限: 2 番目のパラメータは、分割の数を制限します。

    string.split("-", 3)  // 最大 3 つの部分(2 つの分割)

正規表現の特殊文字

正規表現を区切り文字として使用する場合、特定の文字には特別な意味があり、バックスラッシュ(\)でエスケープする必要があります。バックスラッシュ自体も Java 文字列内でエスケープする必要があるため、二重バックスラッシュ(\\)を使用することになります。

一般的な特殊文字:

  • \d - 任意の数字に一致します(Java では\\dと記述します)
  • \s - 任意の空白文字に一致します(Java では\\sと記述します)
  • . - 任意の文字に一致します(Java では\\. と記述します)
  • +, *, ? - 量指定子(Java では\\+\\*\\?と記述します)

これらの例は、Java アプリケーションでさまざまな文字列形式と要件を処理するためのsplit()メソッドの多様性を示しています。

まとめ

この実験(Lab)では、Java で区切り文字を使用して文字列を ArrayList に分割する方法を学びました。以下の点について実践的な経験を積みました。

  • Java における文字列(String)と ArrayList の理解と操作
  • split()メソッドを使用して、区切り文字に基づいて文字列を分割する
  • より柔軟なデータ操作のために、文字列の配列を ArrayList に変換する
  • 単一文字、文字クラス、正規表現など、さまざまな種類の区切り文字を扱う
  • 制限パラメータを使用して分割プロセスを制御する

これらの文字列操作スキルは、Java プログラミングの基本であり、ファイルからのデータの解析、ユーザー入力の処理、CSV や JSON などの構造化テキスト形式の操作など、さまざまなシナリオで役立ちます。

正規表現の力と、ArrayList のような Java コレクションを組み合わせることで、アプリケーションの要件を満たすために、文字列データを効率的に処理および変換できます。