2
템플릿을 구문 분석하기위한 스캐너 유틸리티를 작성했습니다.
는 코드를 고려하십시오스캐너 hasNext (문자열 패턴)가 거짓을 반환합니다.
String input = FileUtils.readFileToString(new File("input file path"));
Scanner scanner = new Scanner(input);
scanner.useDelimiter(System.getProperty("line.separator"));
System.out.println("Checking");
while(scanner.hasNext())
{
System.out.print(scanner.hasNext("\\s*#[^\\n]*"));
System.out.println(" : " + scanner.nextLine());
}
입력 파일 내용 :
# Line 1
#######################
# Check
# Matched with spaces
#
// End of file
참고 : 파일 라인의 끝은 입력에 존재하지 않는합니다.
출력 제작 :
Checking
true : # Line 1
true : #######################
true :
true : # Check
true : # Matched with spaces
true : #
false :
false :
내 질문은 왜 그것이 '#'로 시작하지 않는 경우에도 hasNext()가 true를 돌려 세 번째 줄입니다?
도움이 될 것입니다.
에서 다음 토큰을 찾는되도록 더 토큰을 포함하지 않는다. 완전한 토큰은 접두사이며 구분 기호 패턴과 일치하는 입력으로 접미사가 붙습니다. " 내 구분 기호는 개행 문자이므로 ""여기서 완전한 토큰은 빈 줄 ""이어야합니다. 내가 틀렸어? – Pratham
약간, 그들이 참조하는 구분 기호 패턴은 공백 문자'\\ s '입니다. 'hasNext'는 당신의 패턴을 모른다. – weston
내 코드에서 구분 기호를 새 줄 scanner.useDelimiter (System.getProperty ("line.separator"))로 변경했습니다. hasNext는 완전한 토큰에서 작동합니다. 또한 문서에 명시된 바와 같이 "구분 패턴"\\ s "한 번에 한 공간 만 통과하므로 빈 토큰을 반환 할 수 있습니다.". 따라서 hasNext가 작동 할 빈 토큰을 반환한다고 가정합니다. 맞습니까? – Pratham