String의 멤버 함수로 substring()과 split() 두가지가 가장 흔하게 쓰이는 방식이다.
(String에서 하나의 공백도 하나의 인덱스를 차지하고있는것임을 잊지말자.)
파라미터를 1개 혹은 2개로 받을 수 있다.
문자열변수명.substring(시작지점, 끝지점)
: 시작지점 ~ (끝지점-1)까지 자른다.아래이미지를 보도록 하자.
이 이미지처럼 이해해도된다.
-> substring(1, 3) : "BC"가 리턴이 된다.
만약 문자열 끝에서부터 3글자만 출력하고 싶다면 아래 예제와 같이 사용하면 된다.
public static void main(String[] args) {
String str = "abc123def";
System.out.println(str.substring(str.length()-3, str.length()));
}
그리고 아래예제와 같이 indexOf() 함수를 사용하면 특정 글자 두개를 포함하여 그사이에 글자를 모두 출력하게 된다.
public static void main(String[] args) {
String str = "abc123def";
System.out.println(str.substring(str.indexOf("1"), str.indexOf("3") + 1));
}
문자열변수명.substring(시작지점)
: 시작지점부터 끝까지 리턴한다.-> substring(5) 를 입력하면 인덱스 5부터 문자열 끝까지 잘라서 "3de"가 리턴된다.
substring() 함수를 사용하다가 문자열의 길이보다 긴 값을 substring의 인자로 전달하게 되면 아래 예제와 같이 StringIndexOutOfBoundsException 에러가 발생한다.
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
총 글자수는 12개이지만 10부터 20을 출력하라고 했기때문에 에러가 발생한것이다.
public static void main(String[] args) {
String str = "abcdefg12345";
System.out.println("substring(10,12) : " + str.substring(10,str.length()));
}
정상적으로 잘 출력된다.
이전 에러 메시지에서도 '~~length 12'라는 말이 있었듯이, 파라미터의 최대값이 길이값이 되는것은 상관없다.
즉, 실제 부여되어있는 인덱스는 최대값이 '길이-1'이지만, 파라미터에 인덱스를 초과하는 길이값을 넣는것은 가능하다.
실제적으로는 해당값-1(즉, 인덱스의 최대값)으로 적용되기때문이다.
public static void main(String[] args) {
String str = "abcdefg12345";
System.out.println("substring(10,13) : " + str.substring(10,13));
}
이런 에러를 방지하기 위해서는 try-catch문을 사용해서 StringIndexOutOfBoundsException 에러를 예외처리해주면 된다.
String[] strarr = 문자열변수명.split(기준문자)
아래이미지를 보면 이해하기 쉬울 것이다.
위에 이미지를 아래는 코드화 한것이다.
//예시
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
아래에서 예시를 보자.
//예시
public static void main(String[] args) {
String str = "hello im";
String[] arr = str.split("");
for(int i=0; i<arr.length; i++) {
System.out.println(arr[i]);
}
}
결과이다.
두번째 인자값 limit은 배열의 크기를 결정한다.
예시를 보자.
String str = "12-3-456-7890-234";
String[] arr = str.split("-",2);
//12
//3-456-7890-234
이렇게 2개로 분리된다.
-> 초반에는 구분자에 의해 분리되어 들어가다가, 마지막 원소는 분리되지못하고 전체가 들어간다.
String str = "12-3-456-7890-234";
String[] arr = str.split("-",4);
//12
//3
//456
//7890-234
위처럼 4개로 분리된다.
참고사이트
https://hijuworld.tistory.com/78
https://jamesdreaming.tistory.com/81
https://jamesdreaming.tistory.com/84