Java에서 String을 자르는 방법은 다음과 같이 여러가지 방법이 있습니다.
- String.split
- String.substring
- Commons-io 라이브러리
각각 예제를 통해 어떻게 문자열을 자르는지 알아보겠습니다.
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]
정규표현식(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), 다양한 예제로 쉽게 이해하기를 읽어보시면 좋습니다.
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
commons-io 라이브러리로 문자열 자르기
commons-io 라이브러리를 사용하여 문자열을 자를 수도 있습니다.
commons-io 라이브러리를 설정
Gradle 프로젝트는 build.gradle
의 dependencies에 다음과 같이 추가합니다.
dependencies {
compile group: 'commons-io', name: 'commons-io', version: '2.6'
...
}
Maven 등의 다른 빌드시스템을 사용하는 프로젝트는 mvnrepository.com을 참고하셔서 설정하시면 됩니다.
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
참고
Recommended Posts:
- Java - Locale 클래스
- Java - split()으로 문자열을 자르기
- Java - substring()으로 문자열을 자르기
- Java - List와 Set의 차이점
- Java - forEach 사용 방법
- Java - Thread.join()
- Java - getPath(), getAbsolutePath(), getCanonicalPath()
- Java - Timer, TimerTask
- Java - Number Class
- Java - printf()로 문자열 포맷 출력
- Java - Float을 Byte 배열로 변환, Byte배열을 float으로 변환
- Java - 변수의 유효 범위 (Variable Scope)
- Java - instanceOf 연산자