Post

Java 문자열 분할

1. String.split()

String 클래스 자체는 split() 메서드를 제공한다. 이는 대부분의 시나리오에 매우 편리하고 충분하다. 단순히 구분 기호를 기반으로 주어진 String을 분할하여 Strings 배열을 반환한다.

몇 가지 예이다. 쉼표로 나누는 것이다.

1
String[] splitted = "peter,james,thomas".split(",");

공백으로 나눈다.

1
String[] splitted = "car jeep scooter".split(" ");

또한 점으로 나눈다.

1
String[] splitted = "192.168.1.178".split("\\.");

정규식을 통해 쉼표, 공백 및 하이픈과 같은 여러 문자로 분할한다.

1
String[] splitted = "b a, e, l.d u, n g".split("\\s+|,\\s*|\\.\\s*"));

2. StringUtils.split()

Apache의 common lang 패키지는 공백을 기본 구분 기호로 사용하여 분할 하는 null-safe split() 메서드 가 포함된 StringUtils 클래스를 제공한다.

1
String[] splitted = StringUtils.split("car jeep scooter");

또한 추가 공백을 무시한다.

1
String[] splitted = StringUtils.split("car   jeep  scooter");

3. Splitter.split()

Guava에도 Splitter fluent API가 있다.

1
2
3
4
List<String> resultList = Splitter.on(',')
  .trimResults()
  .omitEmptyStrings()
  .splitToList("car,jeep,, scooter");

4. Split 및 Trim

때때로 주어진 문자열에는 구분 기호 주위에 일부 선행, 후행 또는 추가 공백이 포함된다. 입력 분할 결과 트리밍을 한 번에 처리하는 방법이다.

입력으로 다음과 같이 가정한다.

1
String input = " car , jeep, scooter ";

구분 기호 앞 and/or 뒤에 여분의 공백을 제거하려면 정규식을 사용하여 분할 및 다듬기를 수행할 수 있다.

1
String[] splitted = input.trim().split("\\s*,\\s*");

여기에서 trim() 메서드는 입력 문자열에서 선행 및 후행 공백을 제거하고 정규식 자체가 구분 기호 주위의 추가 공백을 처리한다.

Java 8 Stream 기능을 사용하여 동일한 결과를 얻을 수 있다.

1
2
3
String[] splitted = Arrays.stream(input.split(","))
  .map(String::trim)
  .toArray(String[]::new);

일반적으로 String.split()이면 충분하다. 그러나 더 복잡한 경우에는 Apache의 commons-lang 기반 StringUtils 클래스 또는 깔끔하고 유연한 Guava API를 사용할 수 있다.

[출처 및 참고]

This post is licensed under CC BY 4.0 by the author.