문제와 일치하는 토큰 라인에서 사용하여,스캐너에서 Java
-
22-07-2019 - |
문제
필요에 맞는 일을 줄에서는 텍스트 입력.라인과 같습니다:
to be/ Σ _ Σ [1pos, 1neg] {0=1, 2=1}
내가 사용하는 스캐너 등을 읽는 각 라인의 텍스트,그리고 내가 쓴 다음 코드입니다.그러나,무언가가 제대로 작동하지 않기 때문에,두둑"을"일치하지 않에 대한 라인,그리고 그것이 있어야 하기 때문에"to"에 포함된 라인(가 일치하지 않은""에서 라인,하지만 아무것도 일치):
Scanner scanner = new Scanner(file);
while(scanner.hasNext()) {
String line = scanner.nextLine();
System.out.println("line: " + line);
Pattern p_pos = Pattern.compile("to");
Matcher m_pos = p_pos.matcher(line);
String match = m_pos.group(0);
System.out.println("match: " + match);
boolean b_pos = m_pos.matches();
if(b_pos) {
System.out.println(match);
}
}
출력:
line: to be/ Σ _ Σ [1pos, 1neg] {0=1, 2=1}
Exception in thread "main" java.lang.IllegalStateException: No match found
at java.util.regex.Matcher.group(Matcher.java:485)
at lady.PhrasesFromFile.readFile(PhrasesFromFile.java:31)
at lady.PhrasesFromFile.main(PhrasesFromFile.java:17)
나는 하나 더 많은 질문:어떻게 처리할 수 있는 선도록 스토어에서 모든 것을 행의 시작 부분까"/"기호가?나는 찾을 수 없는 방법에는 API 입니다.가능한 그것은 그렇게 할까?기본적으로 내가 원하는 연속적으로 라인을 통해 이동,저장소의 조각이 라인에서 다른 변수,그리고 다음의 값을 사용하여 이들 변수입니다.이후 나는 얼마나 많은 토큰가하기 전에 처음"/"기호를 사용할 수 없다고 다음()일정 횟수입니다.
사전에 감사합니다.
해결책
.matches()
검색하려고 시도 전체 입력 문자열입니다.사 .find()
을 일치시키려면의 일부 입력 문자열,또는 .lookingAt()
하려면 시작과 일치하는 입력 문자열입니다.
http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Matcher.html
또한,당신이 확장하는 패턴을 포함한 일치하는 그룹(일반 regex 참조하는 방법에 대한 자세한 내용은 일치하는 그룹 작업)을 사용할 수 있습니다 .group()
기능 후에 성공적으로 일치하여 검색하는 부분과 일치하는 특정 그룹 내에 패턴이 있습니다.
다른 팁
할 수 있는 부분을 추출에 필요한 토큰을 사용하여 사용:
String tokenSection = Pattern.compile("(to\\s+.*?)/").matcher(line).find().group(1);
다음 반복 추출하는 것 토큰 사용
Pattern.compile("\\w+").matcher(tokenSection).find();
물론 당신이 없을 플러그 위의 코드 조각합니다.