문자열을 자르는 함수에 대해서 정리해보자
프로그래밍 언어마다 문자열을 자르는 함수의 사용방법이 조금씩 다른경우가 많다.
string 의 멤버 함수로 substring()과 split() 두가지가 가장 흔하게 쓰이는 방식이다.
첫번째로 substring() 함수는 시작지점과 끝지점을 파라미터로 전달받아서 문자열을 자르게 된다.
substring(시작지점, 끝지점) 이런식으로 사용하면 된다.
아래이미지를 보도록 하자.
substring(1, 3) 을 입력하면 인덱스가 1부터 3까지의 글자를 자르게 되는데 B부터 C까지 잘라서 "BC"가 리턴이 된다.
substring(5) 를 입력하면 인덱스 5부터 문자열 끝까지 잘라서 "3de"가 리턴된다.
아래 사용 예제를 보도록 하자.
public static void main(String[] args) {
String str = "abcdefg12345";
System.out.println("substring(5) : " + str.substring(5));
System.out.println("substring(0,1) : " + str.substring(0,1));
System.out.println("substring(1,2) : " + str.substring(1,2));
System.out.println("substring(2,3) : " + str.substring(2,3));
System.out.println("substring(2,10) : " + str.substring(2,10));
}
출력 :
substring(5) : fg12345
substring(0,1) : a
substring(1,2) : b
substring(2,3) : c
substring(2,10) : cdefg123
만약 문자열 끝에서부터 3글자만 출력하고 싶다면 아래 예제와 같이 사용하면 된다.
public static void main(String[] args) {
String str = "abc123def";
System.out.println(str.substring(str.length()-3, str.length()));
}
출력 :
def
그리고 아래예제와 같이 indexOf() 함수를 사용하면 특정 글자 두개를 포함하여 그사이에 글자를 모두 출력하게 된다.
public static void main(String[] args) {
String str = "abc123def";
System.out.println(str.substring(str.indexOf("1"), str.indexOf("3") + 1));
}
출력 :
123
그런데 substring() 함수를 사용하다가 문자열의 길이보다 긴 값을 substring의 인자로 전달하게 되면 아래 예제와 같이 StringIndexOutOfBoundsException 에러가 발생하게 된다. 총 글자수는 12개이지만 10부터 20을 출력하라고 했기때문에 에러가 발생하였다.
public static void main(String[] args) {
String str = "abcdefg12345";
System.out.println("substring(10,20) : " + str.substring(10,20));
}
에러 메시지 :
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: Range [10, 20) out of bounds for length 12
at java.base/jdk.internal.util.Preconditions$1.apply(Preconditions.java:55)
at java.base/jdk.internal.util.Preconditions$1.apply(Preconditions.java:52)
at java.base/jdk.internal.util.Preconditions$4.apply(Preconditions.java:213)
at java.base/jdk.internal.util.Preconditions$4.apply(Preconditions.java:210)
at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:98)
at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckFromToIndex(Preconditions.java:112)
at java.base/jdk.internal.util.Preconditions.checkFromToIndex(Preconditions.java:349)
at java.base/java.lang.String.checkBoundsBeginEnd(String.java:4589)
at java.base/java.lang.String.substring(String.java:2703)
at TestSubString.main(TestSubString.java:5)
이것을 방지하기 위해서는 아래예제와 같이 StringIndexOutOfBoundsException 에러를 예외처리해주면 된다.
public static void main(String[] args) {
String str = "abcdefg12345";
try {
System.out.println("substring(10,20) : " + str.substring(10,20));
} catch(StringIndexOutOfBoundsException e) {
System.out.println("Error : "+e.getMessage());
}
}
출력 :
Error : Range [10, 20) out of bounds for length 12
두번째로 split() 함수는 특정 문자열을 파라미터로 받아서 해당 문자열을 기준으로 문자열을 잘라서 배열에 넣어주는 기능을 한다. String 의 멤버함수이다.
아래이미지를 보면 이해하기 쉬울 것이다.
위에 이미지를 아래는 코드화 한것이다.
public static void main(String[] args) {
String str = "ABC,EE,QQ1,5112";
String arr[] = str.split(",");
for(String cut : arr) {
System.out.println(cut);
}
}
출력 :
ABC
EE
QQ1
5112
'JAVA' 카테고리의 다른 글
JAVA 랜덤(random)함수, 난수 사용 정리 (0) | 2022.05.07 |
---|---|
[JAVA]File exists, length, getName, isFile 등 파일 존재, 사이즈 측정 디랙토리 여부 등 (0) | 2018.06.25 |
JAVA 정규식을 사용하여 패턴 매칭(Regex, Pattern, Matcher) (0) | 2018.06.15 |
자바(java) 코드의 실행 시간 구하기(시간 측정) (0) | 2018.03.30 |