- 자바 입력값 분리
split
- 문자열을 지정한 구분자를 기준으로 분리해 String 배열로 반환해주는 메소드
- StringTokenizer은 java.util 패키지의 클래스이며, split은 String의 메소드이다.
문자열.split(String regex); // regex(정규식)
문자열.split(String regex,int limit);
String regex : 구분자를 뜻하며 문자열을 자르는 기준이됨
int limit(생략가능) : 구분자를 기준으로자르는데 limit의 수만큼만자름
리턴타입은 문자열배열 String[] 임
문자열.split(String regex);
// split(String regex);
// 주로 공백을 사용한 분리가 많이 사용된다.
public class Main{
public static void main(String[] args){
String str = "split method 사용 방법";
String[] strArr = str.split(" "); // str을 공백기준으로 잘라서 strArr에 저장
for(int i=0;i<strArr.length;i++){
System.out.println("strArr["+i+"] : "+strArr[i]);
}
}
}
/* output
strArr[0] : split
strArr[1] : method
strArr[2] : 사용
strArr[3] : 방법
*/
✅ 입력받은 문자열 str 분리메소드 .split 구분자 (" "); str.split(" ");
" " 공백을 기준으로 잘라서 문자열배열에 저장
문자열.split(String regex, int limit);
// split(String regex,int limit);
public class Main{
public static void main(String[] args){
String str = "split method 사용 방법";
String[] strArr = str.split(" ",2); // str을 공백기준으로 2개로 잘라서
System.out.println("strArr.length : "+strArr.length);
for(int i=0;i<strArr.length;i++){
System.out.println("strArr["+i+"] : "+strArr[i]);
}
}
}
/* output
strArr.length : 2
strArr[0] : split
strArr[1] : method 사용 방법
*/
✅ 문자열 str안에 공백이 3개 있지만 가장 먼저 찾은 구분자를 기준으로 2개로 나누어 저장한다.
구분자 여러개 사용 ( |로 구분)
// 구분자 여러개
public class Split {
public static void main(String[] args) {
String str = "split,,사용&방법 입니다"; // 방법 띄어쓰기 2번 입니다
String[] strArr = str.split(",|&| ");
for(int i=0;i<strArr.length;i++){
System.out.println(strArr[i]);
}
}
}
/* output
split
사용
방법
입니다
*/
✅ OR에 사용되는 | 를 사용해 구분자를 여러개 설정할 수 있다.
구분자를 여러번 사용해주면 해당 인덱스에 공백이 들어간다.
한 인덱스의 값만 받기
// 한 인덱스의 값만 가져오기
public class Split {
public static void main(String[] args) {
String str = "010-1234-5678";
String strArr = str.split("-")[1];
String strArr2 = str.split("-")[1];
System.out.println(strArr);
System.out.println(strArr2);
System.out.println(str);
}
}
/* output
1234
1234
010-1234-5678
*/
✅ br = new BufferedReader(); 에서 br.nextLine(); 으로 값을 하나씩 빼서(?)쓰는것과 다르게
각 인덱스 자체에 들어있는값이므로
split[1]을 여러번 한다고 그 값이 str에서 사라지는건 아니다.
// split(String regex,int limit);
public class Main{
public static void main(String[] args){
String str = "111::222:333:444:::";
String[] noLimit = str.split(":");
String[] limit2 = str.split(":",2);
String[] limit7 = str.split(":",7);
String[] limit0 = str.split(":",0);
String[] limitMinus = str.split(":",-1);
System.out.println("---- noLimit ----");
System.out.println(noLimit.length);
for(int i=0;i<noLimit.length;i++){
System.out.println("strArr["+i+"] : "+noLimit[i]);
}
System.out.println("---- limit2 ----");
System.out.println(limit2.length);
for(int i=0;i<limit2.length;i++){
System.out.println("strArr["+i+"] : "+limit2[i]);
}
System.out.println("---- limit7 ----");
System.out.println(limit7.length);
for(int i=0;i<limit7.length;i++){
System.out.println("strArr["+i+"] : "+limit7[i]);
}
System.out.println("---- limit0 ----");
System.out.println(limit0.length);
for(int i=0;i<limit0.length;i++){
System.out.println("strArr["+i+"] : "+limit0[i]);
}
System.out.println("---- limitMinus ----");
System.out.println(limitMinus.length);
for(int i=0;i<limitMinus.length;i++){
System.out.println("strArr["+i+"] : "+limitMinus[i]);
}
}
}
/* output
---- noLimit ----
5
strArr[0] : 111
strArr[1] :
strArr[2] : 222
strArr[3] : 333
strArr[4] : 444
---- limit2 ----
2
strArr[0] : 111
strArr[1] : :222:333:444:::
---- limit7 ----
7
strArr[0] : 111
strArr[1] :
strArr[2] : 222
strArr[3] : 333
strArr[4] : 444
strArr[5] :
strArr[6] : :
---- limit0 ----
5
strArr[0] : 111
strArr[1] :
strArr[2] : 222
strArr[3] : 333
strArr[4] : 444
---- limitMinus ----
8
strArr[0] : 111
strArr[1] :
strArr[2] : 222
strArr[3] : 333
strArr[4] : 444
strArr[5] :
strArr[6] :
strArr[7] :
*/
✅ 빈 문자열도 하나의 문자열로 인식해 저장된다
// split(String regex,int limit);
public class Main{
public static void main(String[] args){
String str = "가 나 다 라 마 바 사";
String[] strArr = str.split(" ",2); // str을 공백기준으로 2개로 잘라서
String[] strArr3 = str.split(" ",3);
String[] strArr0 = str.split(" ",0);
String[] strArrMinus1 = str.split(" ",-1);
String[] strArr7 = str.split(" ",7);
String[] strArr8 = str.split(" ",8);
System.out.println("int limit = 2");
for(int i=0;i<strArr.length;i++){
System.out.println("strArr["+i+"] : "+strArr[i]);
}
System.out.println("int limit = 3");
for(int i=0;i<strArr3.length;i++){
System.out.println("strArr["+i+"] : "+strArr3[i]);
}
System.out.println("int limit = 0");
for(int i=0;i<strArr0.length;i++){
System.out.println("strArr["+i+"] : "+strArr0[i]);
}
System.out.println("int limit = -1");
for(int i=0;i<strArrMinus1.length;i++){
System.out.println("strArr["+i+"] : "+strArrMinus1[i]);
}
System.out.println("int limit = 7");
for(int i=0;i<strArr7.length;i++){
System.out.println("strArr["+i+"] : "+strArr7[i]);
}
System.out.println("int limit = 8");
for(int i=0;i<strArr8.length;i++){
System.out.println("strArr["+i+"] : "+strArr8[i]);
}
}
}
/* output
int limit = 2
strArr[0] : 가
strArr[1] : 나 다 라 마 바 사
int limit = 3
strArr[0] : 가
strArr[1] : 나
strArr[2] : 다 라 마 바 사
int limit = 0
strArr[0] : 가
strArr[1] : 나
strArr[2] : 다
strArr[3] : 라
strArr[4] : 마
strArr[5] : 바
strArr[6] : 사
int limit = -1
strArr[0] : 가
strArr[1] : 나
strArr[2] : 다
strArr[3] : 라
strArr[4] : 마
strArr[5] : 바
strArr[6] : 사
int limit = 7
strArr[0] : 가
strArr[1] : 나
strArr[2] : 다
strArr[3] : 라
strArr[4] : 마
strArr[5] : 바
strArr[6] : 사
int limit = 8
strArr[0] : 가
strArr[1] : 나
strArr[2] : 다
strArr[3] : 라
strArr[4] : 마
strArr[5] : 바
strArr[6] : 사
*/
✅ 나눌 수 있는 문자열 이상의값으로 int limit값을 설정해도 에러 없이 모든 문자열을 받을 수 있다.
마찬가지로 int limit에 -1, 0의 값을 넣어도 구분자를 기준으로 모든 문자열을 분리한다.
✅ 추가
str.split("") 로 빈칸이없는부분도 자를 수 있다.
StringTokenizer(str,"")는 안된다
'Java' 카테고리의 다른 글
| JAVA - 조건문 ( if, else if, else ) (0) | 2022.07.02 |
|---|---|
| JAVA - 문자열 분리 ( StringTokenizer ) (0) | 2022.06.29 |
| JAVA - 입력받기 ( BufferedReader ) (0) | 2022.06.27 |
| JAVA - 입력받기 ( Scanner.next, nextLine ) (0) | 2022.06.26 |
| JAVA - 역슬래시 ( \ ) (0) | 2022.06.26 |