Java - 문자열 자르기, 분리하기(split, substring)

Java에서 String을 자르는 방법은 다음과 같이 여러가지 방법이 있습니다.

각각 예제를 통해 어떻게 문자열을 자르는지 알아보겠습니다.

1. String.split()으로 문자열 자르기

split()은 어떤 문자 기준으로 문자열을 자르고 배열로 리턴해 줍니다.

String은 다음과 같은 메소드들을 제공합니다.

public String[] split(String regex)
public String[] split(String regex, int limit)
  • 인자 regex는 정규표현식(regex)으로 문자열 패턴을 받고, 그 패턴과 일치하는 문자열을 기준으로 잘라줍니다.
  • 인자 limit은 문자열을 나눌 최대 개수입니다. 인자로 2를 전달하면 리턴되는 배열의 길이가 2 이하가 됩니다.

다음은 split()을 사용하여 문자열을 자르는 예제입니다.

String str = "Hi guys This is split example";

String[] result = str.split(" ");
String[] result2 = str.split(" ", 2);
String[] result3 = str.split(" ", 3);

System.out.println(Arrays.toString(result));
System.out.println(Arrays.toString(result2));
System.out.println(Arrays.toString(result3));

Output:

[Hi, guys, This, is, split, example]
[Hi, guys This is split example]
[Hi, guys, This is split example]

이 예제에서는 공백으로 문자열을 잘랐습니다. 또한, 설정된 limit의 개수만큼만 문자열을 자르는 것을 볼 수 있습니다.

다른 예제로, 개행 문자 \n로 문자열을 자를 수도 있습니다.

String str = "Hi guys\n" +
        "This is split example\n" +
        "I'll show you how to use split method";
String[] result = str.split("\n");

System.out.println(Arrays.toString(result));

Output:

[Hi guys, This is split example, I'll show you how to use split method]

1.1 정규표현식(regex)과 split으로 문자열 자르기

위의 예제는 단순한 문자를 인자로 전달하였습니다.

정규표현식을 전달하여 문자열을 자를 수도 있습니다.

다음은 정규표현식과 일반 문자로 잘랐을 때의 결과를 비교하는 예제입니다.

String str = "This island is beautiful";
String[] result = str.split("is");
String[] result2 = str.split("\\bis\\b");

System.out.println(Arrays.toString(result));
System.out.println(Arrays.toString(result2));

Output:

[Th,  , land ,  beautiful]
[This island ,  beautiful]

정규표현식을 사용하면 조금 더 섬세하게 문자열을 자를 수 있습니다.

정규표현식에 대해서 더 알고 싶다면 Java - 정규표현식(regex), 다양한 예제로 쉽게 이해하기를 읽어보시면 좋습니다.

2. String.substring()으로 문자열 자르기

substring()은 인자로 전달된 index를 기준으로 문자열을 자르고 String을 리턴하는 메소드입니다.

String은 다음과 같은 substring 메소드들을 제공합니다.

public String substring(int beginIndex)
public String substring(int beginIndex, int endIndex)
  • 인자로 beginIndex만 전달하면, 이 index가 포함된 문자부터 마지막까지 잘라서 리턴합니다.
  • 인자로 beginIndex, endIndex를 모두 전달하면 begin을 포함한 문자부터 endIndex 이전 index의 문자까지 잘라서 리턴합니다.

다음은 substring을 이용하여 문자열을 자르는 예제입니다.

String str = "Hi guys. This is split example";
String result = str.substring(17);
String result2 = str.substring(17, 22);

System.out.println(result);
System.out.println(result2);

Output:

split example
split

beginIndex로 17을, endIndex로 22를 전달하면 index 17을 포함하고, 22를 포함하지 않는 문자열을 리턴합니다. 즉, index 17의 문자 s부터, index 21의 문자는 t까지 잘라서 리턴합니다.

다음은 indexOf()로 어떤 문자의 index를 찾고 그 index로 substring()에 전달하는 예제입니다.

String str = "This island is beautiful";
int beginIndex = str.indexOf("is");
int endIndex = str.length();
String result = str.substring(beginIndex, endIndex);

System.out.println(result);

Output:

is island is beautiful

indexOf()는 인자로 전달된 문자열의 index를 리턴합니다. 왼쪽에서 오른쪽 순서로 탐색하며 가장 첫번째로 발견한 문자열의 index를 리턴합니다.

만약 is beautiful만 잘라내고 싶다면 어떻게 해야할까요? 문자열 마지막에서 왼쪽방향으로 is를 찾고 그 index를 substring()으로 전달하면 됩니다. 이런 경우 lastIndexOf()를 사용하면 됩니다.

다음은 lastIndexOf()substring()을 사용하여 문자열을 자르는 예제입니다.

String str = "This island is beautiful";
int beginIndex = str.lastIndexOf("is");
int endIndex = str.length();
String result = str.substring(beginIndex, endIndex);

System.out.println(result);

Output:

is beautiful

3. commons-io 라이브러리로 문자열 자르기

commons-io 라이브러리를 사용하여 문자열을 자를 수도 있습니다.

3.1 commons-io 라이브러리를 설정

Gradle 프로젝트는 build.gradle의 dependencies에 다음과 같이 추가합니다.

dependencies {
  compile group: 'commons-io', name: 'commons-io', version: '2.6'
  ...
}

Maven 등의 다른 빌드시스템을 사용하는 프로젝트는 mvnrepository.com을 참고하셔서 설정하시면 됩니다.

3.2 StringUtils으로 문자열 자르기

StringUtils은 substringBetween() 메소드를 제공합니다.

다음과 같이 인자로 문자열을 전달하고, 추가로 2개의 문자열을 전달하면 그 2개의 문자열 사이의 String을 잘라서 리턴해 줍니다.

String str = "This island is beautiful!";
String result = StringUtils.substringBetween(str, "This ","!");
System.out.println(result);

Output:

island is beautiful

substringAfter()는 인자로 전달된 문자열을 찾고, 그 문자열 다음부터 끝까지 잘라서 String을 리턴합니다.

String str = "This island is beautiful!";
String result = StringUtils.substringAfter(str, "This ");
System.out.println(result);

Output:

island is beautiful!

substringBefore()는 인자로 전달된 문자열을 찾고, 처음부터 그 문자열 이전까지 잘라서 String을 리턴합니다.

String str = "This island is beautiful!";
String result = StringUtils.substringBefore(str, "is ");
System.out.println(result);

Output:

Th

substringBeforeLast()는 반대방향으로 문자열을 찾고, 처음부터 그 문자열 이전까지 잘라서 String을 리턴합니다.

String str = "This island is beautiful!";
String result = StringUtils.substringBeforeLast(str, "is ");
System.out.println(result);

Output:

This island

참고

Loading script...

Related Posts

codechachaCopyright ©2019 codechacha