접기
class A { public static void main(String[] args) { String source = "0123456789abcdefghijABCDEFGHIJ!@#$%^&*()ZZZ"; String str=""; String[] temp = new String[5]; for(int i=1, j=0; source.length()>i-1; i++) { str += source.charAt(i-1); if((i%10==0 && i != 0) || i==source.length()) { temp [j] = str; j++; str=""; } } for(int i=0; i<temp.length; i++) System.out.println(temp[i]); } }
접기 접기
헤드퍼스트 예제에 보면 아래와 같이 파일에서 한줄 읽어서 lineToParse란 변수로 받아오는데
이 문자열엔 "/" 문자가 들어가 있다 이것을 구분자로 문자열을 나눠 문자열 배열로 집어넣어보자 private void makeCard(String lineToParse){ String[] result = lineToParse.split("/"); QuizCard card = new QuizCard(result[0], result[1]); cardList.add(card); System.out.println("made a card"); }
매우 간단하다. 문자열배열 = 문자열.split(정규표현식); 주어진 정규표현식을 구분자로 문자열을 나눠 문자열배열로 반환해준다.
접기 접기
String 클래스의 split 메소드(함수)로, 문자열을 배열로 만들되, 특정 분리자를 지정할 수 있습니다. 분리자를 기준으로 문자열이 여러 토막으로 분해됩니다.
split 으로 문자열 분해하여, 배열에 담는 예제 소스 파일명: Foo.java class Foo { public static void main(String[] args) { String s; String[] array; // 콜론(:)으로 구분된 문자열 분해 s = "자장면:탕수육:짬뽕:칼국수"; array = s.split(":"); dumpArray(array); /* 출력 결과: array[0] = 자장면 array[1] = 탕수육 array[2] = 짬뽕 array[3] = 칼국수 */ // 공백으로 구분된 문자열 분해 s = "철수는 영희와 만나서 맹구와 함께 봉숭아 학당에 갔습니다"; array = s.split(" "); dumpArray(array); /* 출력 결과: array[0] = 철수는 array[1] = 영희와 array[2] = 만나서 array[3] = 맹구와 array[4] = 함께 array[5] = 봉숭아 array[6] = 학당에 array[7] = 갔습니다 */ } // 배열을 화면에, 요소별로 알기 쉽게 출력 public static void dumpArray(String[] array) { for (int i = 0; i < array.length; i++) System.out.format("array[%d] = %s%n", i, array[i]); } }
split(":") 이것은 콜론(:) 문자를 기준으로 문자열을 나눈 것이고 콜론 대신 정규식/정규표현식(Regular Expressions; Regex) 을 지정하여 분해할 수도 있습니다. split() 과 정반대로, 배열을 문자열로 합치는 방법은 여기에 있습니다: ▶▶ Java/자바] join 메소드: 배열을 하나의 문자열로 합치기, 구분문자 넣어 ▶▶ Java/자바] split()에서 Tab(탭 문자) 구분자; 마침표를 구분 기호로 분리
접기 접기
split는 문자열을 나누는 메서드다.
String 문자열 = "가:나:다:가나다";
String[] 나눈배열 = 문자열.split(":");
//나눈배열 : {"가", "나", "다", "가나다"}
System.out.println(나눈배열[0]);
//결과 : 가
System.out.println(나눈배열[나눈배열.length-1]);
//결과 : 가나다
그런데 아래처럼 쓰면 작동을 안 한다.
String 문자열 = "가.나.다.가나다";
String[] 나눈배열 = 문자열.split(".");
이렇게 써야 한다.
String 문자열 = "가.나.다.가나다";
String[] 나눈배열 = 문자열.split("\\.");
그래야 작동한다.
이건 split의 인자로 들어가는 String 토큰이 regex 정규식이기 때문이다. 정규식에서 .은 무작위의 한 글자를 의미한다. 그러면 모든 문자가 토큰이 되기 때문에 배열에 남는 게 없게 되는 것이다.
따라서 이스케이프 문자를 앞에 붙여 줘야 한다. 그런데 String 안에 이스케이프 문자인 \를 써 주려면 \라고 써 줘야 한다. 따라서 \라고 쓰는 것이다. 그래서 \.이라고 쓰면 정규식 쪽에서는 .라고 인식을 하고 실제 .을 찾게 되는 것이다.
아악… 머리아프다. 여튼 기억하라. 기호를 써서 split를 쓸 때 뭔가 작동을 안 하면 \을 붙여 보라.
참, 그냥 \라고만 붙여야 하는 것도 있는데, 아래 애들이다.
\b \t \n \f \r \” \’ \
참고하면 될 것이다.
접기