원본 글: https://www.baeldung.com/java-split-string
종종 문자열을 쪼갤때가 있습니다. 이 글은 문자열을 쪼개기 위한 간단한 방법들을 살펴봅니다.
1. String.split()
먼저, String에서 기본제공되는 split()메서드를 확인해보겠습니다. 구분자를 인자로 받아서 이를 기준으로 배열을 반환합니다.
@Test
public void string_split_test() {
String[] result = "peter,james,thomas" .split(",");
String[] whiteSpaceResult = "peter james thomas".split(" ");
String[] expected = {"peter", "james", "thomas"};
Assertions.assertArrayEquals(result, expected);
Assertions.assertArrayEquals(whiteSpaceResult, expected);
}
추가로 특수문자를 입력하여 문자열을 쪼갤 수도 있습니다.
@Test
public void string_split_special_char_test() {
String [] result = "127.0.0.1".split("\\.");
Assertions.assertArrayEquals(new String[]{"127","0","0","1"}, result);
}
또한 정규표현식으로도 가능합니다.
@Test
public void string_split_regex_test() {
String[] result = "b a, e, l.d u, n g".split("\\s+|,\\s*|\\.\\s*");
Assertions.assertArrayEquals(new String[]{"b","a", "e", "l","d", "u", "n", "g"}, result);
}
2. StringUtils.split()
Apache-common 라이브러리에서 제공되는 split()함수가 있습니다. 기존 split()함수의 null-safe한 방식으로 구분자를 받을 수도 있지만 받지 않을 수도 있습니다. 받지 않은 경우 whitespace를 기준으로 문자열을 분리합니다.
@Test
public void apache_common_split_test() {
String[] result = StringUtils.split("peter james thomas");
String[] whiteSpaceResult = StringUtils.split("peter james thomas");
String[] expected = {"peter", "james", "thomas"};
Assertions.assertArrayEquals(result, expected);
Assertions.assertArrayEquals(whiteSpaceResult, expected);
}
3. Splitter.split()
Guava 라이브러리에서 제공하는 메서드가 있습니다.
@Test
public void guava_split_test() {
List<String> result = Splitter.on(',')
.trimResults()
.omitEmptyStrings()
.splitToList("peter,james,,thomas");
Assertions.assertArrayEquals(result.toArray(), new String[]{"peter", "james", "thomas"});
}
체인드 메서드를 통해 여러 전략을 취하는 것을 확인할 수 있습니다.
4. Split and Trim
구분자 주변에 공백이 있는데 이를 제거하거나 무시해야하는 경우가 있을 수 있습니다. 이를 한 번에 제거하여 배열을 리턴 받는 방법을 알아보겠습니다.
@Test
public void stream_trim_and_split_test() {
String input = "peter , james, thomas";
String[] result = Arrays.stream(input.split(","))
.map(String::trim)
.toArray(String[]::new);
Assertions.assertArrayEquals(new String[]{"peter", "james", "thomas"}, result);
}
java8이상에서 제공하는 Stream을 이용하여 공백제거 및 문자열 분리까지 하는 예제입니다.
먼저 stream 배열로 만들고, 해당 배열인덱스에 대해서 trim()을 수행 및 String[] 배열로 재구성합니다.
5. Splitting String Into Two Halves
구분자가 아닌 특정 인덱스를 기준으로 나누고 싶다하면 String.subString() 메서드를 사용하면 됩니다.
@Test
public void subString_test() {
String input = "123456789";
Assertions.assertArrayEquals(new String[]{"1234","56789"}, new String[]{input.substring(0, 4), input.substring(4)});
}
6. 결론
저번 포스트에서도 비슷하게 기본 제공하는 메서드들은 null-safe하지 않아서 아쉬움이 있습니다.
결국엔 null-safe한 Apache-commons 라이브러리를 사용해야하나 싶습니다.
'Baeldung번역&공부 > Java-string' 카테고리의 다른 글
날짜 검증하는 여러 방법(Check If a String Is a Valid Date in Java) (0) | 2025.02.05 |
---|---|
Java에서 문자를 숫자로 치환하는 여러 방법(Check If a String Is Numeric in Java) (0) | 2025.02.05 |
문자열 비어있는지 확인법(Checking for Empty or Blank Strings in Java) (0) | 2025.02.02 |
문자열에서 마지막 문자를 지우는법(How to Remove the Last Character of a String?) (0) | 2025.02.01 |
줄바꿈에 대하여(Adding a Newline Character to a String in Java) (0) | 2025.02.01 |