2012-03-16 2 views
0

Java에서 정규식을 사용하여 숫자 문자열을 분할하고 싶습니다. 나는 온라인 정규식 테스터를 사용하여 정규식을 테스트한다. 하지만 자바가 잘못되었습니다.자바에서 정규식을 사용하여 숫자 문자열 분할

Pattern pattern = Pattern.compile("[\\\\d]{1,4}"); 
String[] results = pattern.split("123456"); 
// I expect 2 results ["1234","56"] 
// Actual results is ["123456"] 

무엇이 있습니까?


나는이 질문이 지루하다는 것을 알고있다. 하지만이 문제를 해결하고 싶습니다. 답변

Pattern pattern = Pattern.compile("[\\d]{1,4}"); 
String[] results = pattern.split("123456"); 
// Results length is 0 
System.out.println(results.length); 

가 작동하지 않습니다. 나는 그것을 시도했다. 결과에는 아무 것도 반환하지 않습니다. 대답하기 전에 시도하십시오.

저를 도운 사람들에게 진심으로 감사드립니다.


솔루션 :

Pattern pattern = Pattern.compile("([\\d]{1,4})"); 
Matcher matcher = pattern.matcher("123456"); 
List<String> results = new ArrayList<String>(); 
while (matcher.find()) { 
    results.add(matcher.group(1)); 
} 

출력이 개 결과 [ "1234", "56"]

+0

split은 구분 기호 사이에 * 분리 문자를 * 구분 기호로 반환하므로 분리 기호 자체를 버리기 때문에 빈 배열이 나타납니다. 아마도 도움이 될 것입니다. http://stackoverflow.com/questions/2206378/how-to-split-a-string-but-also-keep-the-delimiters http://stackoverflow.com/questions/275768/is-there -a-way-to-split-strings-with-string-split-and-the-delimiters – Thilo

+0

이제 알겠습니다. 도와 주셔서 감사합니다. –

답변

5
Pattern pattern = Pattern.compile("[\\\\d]{1,4}") 

너무 많은 백 슬래시 시도 [\\d]{1,4} (당신이 한 번만를 탈출해야, 따라서 d 앞에있는 역 슬래시는 \\이됩니다. 작성한 패턴은 실제로는 [\\d]{1,4} (리터럴 백 슬래시 또는 리터럴 d, 1 ~ 4 회)입니다.

자바가 표준 라이브러리에 정규 표현식을 추가하기로 결정했을 때, 정규 표현식 리터럴 구문을 문자열 대신 shoe-horning 구문을 추가해야했습니다 (읽을 수없는 추가 이스케이프 및 컴파일 타임 구문 검사 없음).

+0

'[]'s은 전혀 필요 없습니다. –

+0

패턴 패턴 = Pattern.compile ("\\ d {1,4}"); String [] results = pattern.split ("123456"); 결과 길이는 0입니다. –

+0

제발, [\\ d] {1,4}이 (가) 작동하지 않습니다. 시도하십시오. 고마워. –

1

솔루션 :

Pattern pattern = Pattern.compile("([\\d]{1,4})"); 
Matcher matcher = pattern.matcher("123456"); 
List<String> results = new ArrayList<String>(); 
while (matcher.find()) { 
    results.add(matcher.group(1)); 
} 

출력이 개 결과 [ "1234", "56"]

1

당신이 캡처 그룹을 지정할 수 없기 때문에, 하나의 메소드 호출에 그것을 할 수 없습니다 분할, 4 개의 덩어리로 쪼개 질 필요가있을 것입니다.

그것은 "우아한"아니지만, 처음에 분할 문자를 삽입해야 후 분할 :

System.out.println(Arrays.toString(results)); // prints [1234, 56] 

참고가 필요하지 않은 : 여기

String[] results = "123456".replaceAll("....", "$0,").split(","); 

출력입니다 String에는 split-by-regex 메서드가 있기 때문에 Pattern 등을 사용하면 한 줄짜리 솔루션이됩니다.

관련 문제