2014-05-15 1 views
1

패턴 및 매처를 사용하여 주어진 문자열에 2 자리 사이의 공백이 있는지 확인하려고합니다. 예를 들어 "5 1"은 true로 돌아가고, "51"은 false로 되돌아 가야합니다. 처음에는 string.replaceAll을 정규 표현식과 함께 사용했지만 멋지게 작동했지만 패턴으로 이동하면 작동하지 않는 것처럼 보입니다.패턴 및 매처를 사용하여 숫자 찾기

String findDigit = "5  1/3"; 
    String regex = "(\\d) +(\\d)"; 
    findDigit = findDigit.replaceAll(regex, "$1 $2"); 

    Pattern p = Pattern.compile(regex); 
    Matcher m = p.matcher(findDigit); 
    System.out.println(m.matches()); 
    System.out.println(m.hitEnd()); 

나는 이것을 처음으로 시작했습니다. replaceAll은 문제없이 작동하고 여분의 공백을 제거하지만, m.matches와 m.hitEnd는 모두 false를 반환합니다. 그럼 난 사실 (분명히) 돌아 오면 나는 경우 단지

String findDigit = "5"; 
    String regex = "\\d"; 
    Pattern p = Pattern.compile(regex); 
    Matcher m = p.matcher(findDigit); 
    System.out.println(m.matches()); 
    System.out.println(m.hitEnd()); 

을 단순화 있도록 뭔가를 잘못하고 일치 할 거라고 생각하지만이

String findDigit = "5 3"; 
    String regex = "\\d"; 
    Pattern p = Pattern.compile(regex); 
    Matcher m = p.matcher(findDigit); 
    System.out.println(m.matches()); 
    System.out.println(m.hitEnd()); 

로 변경하면 다시 모두 거짓 온다. 그래서 내 주요 질문은 내 문자열에 어떤 숫자가 먼저 있는지 그리고 더 구체적으로 어떻게 결정되는지입니다. 내 문자열에 숫자가있는 경우 어떻게 결정합니까? 나는 그게 타격이라고 생각 했지.하지만 나는 틀렸어. 미리 감사드립니다.

+0

: 예를 들어

? – jhnewkirk

+0

누가 저를 다시 뽑았는지 고맙다. 그리고 내가 바보가되었다는 것을 알았어. m.find(). * 책상에 머리를 쓰다듬어 둔다. – jhnewkirk

답변

0

대답은 물론 m.find()입니다. 오늘 아침에 바보가되어서 죄송합니다. 모두 보아 주셔서 감사합니다 :)

2

여러 공백과 일치하는 항목을 찾고 있지만 출력 형식을 유지하려면 그룹 및 역 참조를 사용할 수 있습니다.

String input = "blah 5    6/7"; 
Pattern p = Pattern.compile("(\\d)\\s+(\\d)"); 
Matcher m = p.matcher(input); 
while (m.find()) { 
    System.out.printf("Whole match: %s\n\tFirst digit: %s\n\tSecond digit: %s\n", m.group(), m.group(1), m.group(2)); 
} 

출력 이유에 대한 설명없이하는 이유 -1 이렇게 빨리

Whole match: 5    6 
    First digit: 5 
    Second digit: 6 
+0

이것은 내가 정말로 가지고 있었던 또 다른 질문에 정말로 도움이되었다. – jhnewkirk

+0

@jhnewkirk 환영합니다! – Mena