본문 바로가기
개발 언어/Java

Java String 자르기, 분리, 합치기 (substring, split, join)

by 정권이 내 2023. 2. 10.

[Java] String 문자열 자르기/분리/합치기 substring, split, join

 

문자열 데이터를 사용하다보면 String 원형 그대로 사용하기보다는 특정 구분자로 문자열을 나누거나 인덱스를 기준값으로 사용하여 문자열을 여러 단위로 구분하여 사용할일이 많이 있습니다.

일반적으로 문자열의 인덱스 값을 기준으로 문자열을 자를땐 substring 을 사용하고 특정 문자로 문자열을 분리할때는 split 을 사용합니다.

 

substring(int beginIndex, int endIndex)

substring은 기본적으로 두개의 인자를 받는 String 반환형 메서드입니다. 첫번째 인자는 시작 인덱스로 전체 문자열에서 추출할 문자열의 시작위치를 나타내고 두번째 인자는 종료 인덱스로 추출할 문자열의 끝 위치를 뜻합니다.

 

그림으로 예시를 들어 설명해보겠습니다.

img

 

String totalStr = "GREENAPPLE";
String green = totalStr.substring(0, 5);
String apple = totalStr.substring(5, 10);

 

substring 사용시 시작 위치의 인덱스 지정은 쉬운데 종료 위치의 인덱스를 지정할때 헷갈리는 부분이 있습니다. 그림에서 GREEN 이라는 문자열을 추출하기 위해서 substring(0,5)를 사용했는데 종료인덱스가 5이면 GREENA 가 추출되어야 하는게 아닌가?? 라는 생각이 들수 있습니다.

java 공식 문서에서 substring 메서드에 대한 설명을 보면 다음과 같이 나와있습니다.

Returns a string that is a substring of this string. The substring begins at the specified beginIndex and extends to the character at index endIndex - 1. Thus the length of the substring is endIndex-beginIndex.

https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/String.html#substring(int,int)

 

풀이하자면 substring의 두번째 인자인 endIndex 값은 -1 이 적용되어 적용되고 endIndex - beginIndex는 추출할 문자열의 길이를 뜻합니다.

img

 

substring(int beginIndex)

substring에서 인자로 beginIndex값 하나만 설정할시 원본 문자열의 해당 인덱스의 위치부터 문자열 끝까지 추출합니다.

img

 

String apple1 = substring(5, 10);
String apple2 = substring(5);
// apple1 = apple2

GREENAPPLE 문자열에서 APPLE을 추출하기위해 substring(0,5)를 사용해도 되지만 좀더 간편하게 substring(5)를 사용해서 추출할수 있습니다.

 

split(String regex)

split은 정규표현식을 기준으로 문자열을 분리하여 String 배열형태로 반환하는 메서드입니다. 정규표현식에 대한 설명은 여기서 다루지 않겠지만 쉽게 생각해서 모든 문자의 형태 입니다.

 

String foods = "bread:coffee:juice";
String regex = ":";

List<String> ipSplit = foods.split(regex);
for (food : foods){
System.out.println(food);
}

 

bread
coffee
juice

위 예제에서 foods 문자열을 ":" 문자로 구분해서 문자열 배열 형태로 반환 받았습니다.

 

join(구분자, 문자열 리스트)

join 메서드의 원형은 두가지 형태가 있는데 둘다 반환형태는 동일합니다. split의 반대 역할을 하는 join은 여러개의 문자열을 하나로 합치는 메서드입니다. 바로 예제 코드로 확인해보겠습니다.

public static String join(CharSequence delimiter, CharSequence... elements)
{
...
}
public static String join(CharSequence delimiter, Iterable<? extends CharSequence> elements)
{
...
}

 

String foods1 = String.join(":", "bread", "coffee", "juice");
String foods2 = String.join(":", List.of("bread", "coffee", "juice"));

System.out.println(foods1);
System.out.println(foods2);

 

bread:coffee:juice
bread:coffee:juice

foods1, foods2 모두 동일한 값을 반환하고 있는데 인자값으로 합칠 문자열들을 모두 입력하거나 열거형 형태로 입력하는 방식 두가지가 존재합니다. 일반적으로는 열거형 형태로 넣는 두번째 방식을 사용합니다.

사용시 주의할점으로 합칠 문자열들 중에서 null 값이 있다면 NullPointerException이 발생할수 있으니 예외처리를 하거나 null값이 들어가지 않도록 해야합니다.

반응형

댓글