Java 에서 구분 기호를 사용하여 문자열을 ArrayList 로 분할하는 방법

JavaBeginner
지금 연습하기

소개

Java 프로그래밍에서 문자열 조작과 ArrayList 와 같은 컬렉션 작업은 필수적인 기술입니다. 이 튜토리얼은 Java 에서 구분 기호를 사용하여 문자열을 ArrayList 로 분할하는 과정을 안내합니다. 이 랩을 마치면 텍스트 데이터를 관리 가능한 조각으로 나누어 유연한 컬렉션에 저장하는 방법을 이해하게 될 것입니다. 이를 통해 Java 애플리케이션에서 다양한 데이터 처리 작업을 수행할 수 있습니다.

Java 에서 문자열과 ArrayList 이해하기

문자열 분할에 들어가기 전에, 이 랩에서 사용할 두 가지 주요 구성 요소를 이해해 봅시다.

Java 의 문자열 (String)

Java 에서 String 은 문자 시퀀스입니다. Java 프로그래밍에서 가장 일반적으로 사용되는 클래스 중 하나입니다. 문자열은 불변 (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()이라는 내장 메서드를 제공하여 구분 기호를 기반으로 문자열을 여러 부분으로 나눌 수 있도록 합니다. 이 메서드는 구분 기호로 나뉜 부분 문자열을 포함하는 문자열 배열을 반환합니다.

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 배열은 다섯 개의 요소를 포함하며, 각 요소는 원래 쉼표로 구분된 문자열의 과일 이름을 나타냅니다.

다음 단계에서는 이 배열을 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 사용의 장점 중 하나인 컬렉션에 새 요소를 쉽게 추가할 수 있는 기능을 보여줍니다.

배열과 ArrayList 의 차이점을 확인하십시오.

  • 배열은 고정된 크기를 갖는 반면, ArrayList 는 동적으로 증가할 수 있습니다.
  • ArrayList 는 요소를 조작하기 위한 add(), remove(), get()과 같은 메서드를 제공합니다.
  • ArrayList 는 기본 유형이 아닌 객체만 저장할 수 있습니다 (하지만 Java 는 오토박싱 (autoboxing) 을 사용하여 변환을 자동으로 처리합니다).

다음 단계에서는 문자열 분할에 사용할 수 있는 다양한 구분 기호를 살펴보겠습니다.

다양한 구분 기호 사용하기

이전 단계에서는 문자열을 분할하기 위해 쉼표를 구분 기호로 사용했습니다. 그러나 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+")  // 하나 이상의 숫자로 분할
  4. 분할 제한: 두 번째 매개변수는 분할 횟수를 제한합니다.

    string.split("-", 3)  // 최대 3 부분 (2 분할)

정규 표현식의 특수 문자

정규 표현식을 구분 기호로 사용할 때 특정 문자는 특수한 의미를 가지며 백슬래시 (\) 로 이스케이프해야 합니다. 백슬래시 자체는 Java 문자열에서 이스케이프해야 하므로 이중 백슬래시 (\\) 가 사용됩니다.

일부 일반적인 특수 문자:

  • \d - 모든 숫자와 일치합니다 (Java 에서는 \\d로 작성).
  • \s - 모든 공백 문자와 일치합니다 (Java 에서는 \\s로 작성).
  • . - 모든 문자와 일치합니다 (Java 에서는 \\.)
  • +, *, ? - 수량자 (quantifiers) (Java 에서는 \\+, \\*, \\?로 작성)

이 예제는 Java 애플리케이션에서 다양한 문자열 형식 및 요구 사항을 처리하기 위한 split() 메서드의 다재다능함을 보여줍니다.

요약

이 랩에서는 Java 에서 구분 기호를 사용하여 문자열을 ArrayList 로 분할하는 방법을 배웠습니다. 다음 사항에 대한 실질적인 경험을 얻었습니다.

  • Java 에서 문자열 (String) 과 ArrayList 이해 및 사용
  • split() 메서드를 사용하여 구분 기호를 기반으로 문자열을 나누기
  • 더 유연한 데이터 조작을 위해 문자열 배열을 ArrayList 로 변환
  • 단일 문자, 문자 클래스 및 정규 표현식을 포함한 다양한 유형의 구분 기호 사용
  • 제한 매개변수를 사용하여 분할 프로세스 제어

이러한 문자열 조작 기술은 Java 프로그래밍의 기본이며 파일에서 데이터 구문 분석, 사용자 입력 처리, CSV 또는 JSON 과 같은 구조화된 텍스트 형식 작업 등 다양한 시나리오에서 도움이 될 것입니다.

정규 표현식의 강력함과 ArrayList 와 같은 Java 컬렉션을 결합하여 애플리케이션의 요구 사항을 충족하도록 문자열 데이터를 효율적으로 처리하고 변환할 수 있습니다.