String[] 변수이름 = String타입 변수.split("구분자");
이렇게 사용한다.
자바에서 기본으로 제공하는 패키지에 해당된 메서드 이다.
메서드 내부에 들어가보면 이렇게 생겼다.
public String[] split(String regax);
매개변수(파라미터) : regax(regular expression) 문자열을 분리할 기준이 되는 정규 표현식이다. 특정 문자나 패턴을 사용할 수 있다.
리턴값 : String[] 문자열 타입의 배열로 값을 반환한다. 구분자를 기준으로 분리된 문자열 조각들의 배열이다.
아직 무슨 말인지 모르겠다고? 나도 그렇다.
예제를 보며 이해해보자.
기본 사용법.
public class Main {
public static void main(String[] args) {
String command = "삭제?id=1";
String[] parts = command.split("=");
for (String part : parts) {
System.out.println(part);
}
// 향상된 for문이다.
// for (int i = 0; i < parts.length; i++) {
// String[] part = parts[i];
// System.out.println(part); 와 같다. (아마도?)
//}
}
}
결과.
삭제?id
1
예제를 하나하나 뜯어보자.
String 타입의 변수 command 에 "삭제?id=1"의 값을 담았다.
command.split("=");
구분자를 = 로 두었다. command 에 담긴 값 중 = 를 기준으로 문자열을 나눈다(split).
"삭제?id"
"1"
command에 담긴 값이 "="를 기준으로 두개로 나뉘었다.
나뉜 문자열을 String[] parts 에 각각 하나의 배열 요소로 분리한다.
parts[0] = "삭제?id"
parts[1] = "1"
요렇게 된다.
문자열변수.split()이 선언되면 문자열을 왼쪽에서 오른쪽으로 탐색한다. 주어진 구분자(위의 예제에선 "="가 구분자였다.)를 만날 때 마다 문자열을 분리한다.
구분자는 삭제한다. 구분자는 결과 배열에 포함되지 않고 제거된다.
만약 구분자 양쪽에 아무 내용이 없다면, 결과 배열에 빈 문자열("")이 포함된다.
빈 문자열 예제.
String command = "=value";
String[] parts = command.split("=");
for (String part : parts) {
System.out.println("[" + part + "]");
}
String(문자열)타입의 변수 command에 "=value" 값을 담았다.
String[] parts = command.split("=") 을 통해 command 타입 안에 있는 값을 정해준 구분자("=")를 기준으로 나눈다.
=의 기준 왼쪽에는 "" 아무것도 없다.
=의 기준 오른쪽에는 "value" 가 있다.
실행 결과.
[]
[value]
parts[0] = ""
parts[1] = "value"
요렇게 된다.
조금 더 나아가보자.
split()메서드는 정규식을 지원하므로 여러 구분자를 동시에 사용할 수 있다. (정규식은 뒤에서 간단히 다시 말할꺼다. 지금은 그냥 규식이 정도로 생각하자)
String command = "삭제?id=1,name=John";
String[] parts = command.split("[=,]");
//[]는 정규식. (규식아!!!!!)
//[a,b,c] -> a,b,c 중 어느 하나라도 매칭되면 문자열을 나눈다.
for (String part : parts) {
System.out.println(part);
}
실행 결과
삭제?id
1
name
John
이것도 하나씩 뜯어보자.
String 타입의 command에 "삭제?id=1,name=John" 이라는 문자열 값을 담았다.
String[] parts = command.split("[=,]") =와,를 기준으로 두 개 중 어느 하나라도 해당이 되면 문자열을 나누어 Strin타입의 배열에 담는다.
split()은 왼쪽에서 오른쪽으로 처리된다.
= 기준 왼쪽 : "삭제?id"
= 와 , 사이 " "1"
, 와 = 사이 "name"
= 기준 오른쪽 : "John"
parts[0] = "삭제?id"
parts[1] = "1"
parts[2] = "name"
parts[3] = "John"
이렇게 parts.length()는 4가 나온다.
뭐가 알아야할게 많다. 좀만 힘내자.
split(String regex, int limit)을 사용하면 나뉘는 배열의 크기를 제한 할 수 있다.
(앞서 .startsWith()메서드와 동일하게 기본 제공 클래스 내부에서 오버로드 되어 있는 모냥이다.)
String command = "삭제?id=1=name";
String[] parts = command.split("=", 2); // 최대 두 개로 나눔
for (String part : parts) {
System.out.println(part);
}
실행 결과
삭제?id
1=name
구분자로 설정한 "="를 기준으로 왼쪽에서 오른쪽으로 문자열을 탐색했을 때 첫번째로 "삭제?id"가 분리되어 배열에 담긴다. limit이 2이므로 뒤에는 구분식이 있어도 전부 하나의 배열에 담긴다.
parts[0] = "삭제?id"
parts[1] = "1=name"
구분자가 없는 경우, 원본 문자열이 그대로 배열의 첫 번째 요소로 반환된다.
String command = "삭제";
String[] parts = command.split("=");
System.out.println(parts.length); // 1
System.out.println(parts[0]); // 삭제
안녕 규식아.
우리 규식이는 문자열에서 특정 조건을 만족하는 것을 쉽게 반환케 하는 명령어들이다.
구분자로 정규식을 사용할 때, 특수문자(. * | [ ] 등등)은 반드시 이스케프(\이건가 정규식에서 특수문자로 인식되는 문자를 일반 문자로 취급하도록 만든다.) 처리해야한다.
| 정규식 | 기능 |
|---|---|
| . | 모든 문자를 의미한다. |
| \. | . 문자 자체를 의미한다. |
| * | 0번 이상 반복을 의미 |
| \* | * 문자 자체를 의미한다. |
| 등등등... |
. 을 구분자로 사용하는 예제
public static void main(String[] args) {
String text = "a.b.c";
String[] parts = text.split("\\."); // 점(.)은 특수문자이므로 \\로 이스케이프 처리
for (String part : parts) {
System.out.println(part);
}
}
결과값.
a
b
c
. 을 구분자로 사용하는데 이스케이프(\\)처리를 안했을 경우
public static void main(String[] args) {
String text = "a.b.c";
String[] parts = text.split("."); // 이스케이프 처리 안함
for (String part : parts) {
System.out.println(part);
}
}
출력값.
만약 이스케이프(\)처리 없이 text.split(".")을 사용하면 모든 문자가 매칭되어 "" 이 결과값으로 출력된다.
String text = "a==b";
String[] parts = text.split("=");
for (String part : parts) {
System.out.println(part);
}
결과
a
b
구분자로 "="를 설정하였는데 text안에 "a==b" 처럼 구분자가 두개 들어있다.
당황하지 말고 왼쪽에서 오른쪽으로 처리하자.
= 기준 왼쪽 : "a"
= 와 = 사이 " "" (공백)
= 기준 오른쪽 "b"
parts[0] = "a"
parts[1] = ""
parts[2] = "b"
이렇게 3개의 배열이 나온다.
String text = "===";
String[] parts = text.split("=");
for (String part : parts) {
System.out.println(part);
}
결과.
위의 경우와 동일하게 생각하자.
= 기준 왼쪽 : ""
= 와 두번쨰 = 사이 : ""
두번째 = 와 세번째 = 사이 : ""
세번째 = 오른쪽 : ""
parts[0] = ""
parts[1] = ""
parts[2] = ""
parts[3] = ""
분식이와 규식이.. 어느집 자식들이냐.. 왜케 날 힘들게 해...