Java

JAVA - 문자열 분리 ( split )

비망노트 2022. 6. 28. 22:23

- 자바 입력값 분리

 

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,"")는 안된다

 

 

 

 

 

https://jhnyang.tistory.com/336