2013-11-22 3 views
0

나는 내 프로젝트에서 다음 코드 조각이 :Java 스캐너가 올바르게 작동하지 않습니까?

public void addText(String s){ 
    Scanner scan; 
    int newInt = Integer.parseInt(s.substring(s.indexOf('\t') + 1 + 1)); 
    //find insertion point 
    String temp = ""; 
    scan = new Scanner(text); 
    int prev = 0; 
    while(scan.hasNextInt() && newInt > scan.nextInt()){ 
     temp += text.substring(prev, text.indexOf('\n')) + "\r\n"; 
     prev = text.indexOf('\n') + 1; 
    } 
    text = temp + s + "\r\n" + text.substring(prev); 
} 

이의 목표는 기존의 문자열로 문자열을 삽입하고 다소 "숫자 순서"에 보관하는 것입니다.

String s"CityName\t\tSomeNumber"과 같은 형식의 문자열입니다. newInt 코드가 작동합니다 (디버깅으로 확인). 작동하지 않는 것은 while 루프입니다. text에 데이터가있는 경우에도 scan.hasNextInt()이 실패합니다.

예를 들어, text = "Charlestown\t\t9", s = "Downville\t\t15"이라고 가정합니다. newInt이 할당됩니다. while 루프는 한 번만 반복하고 15 > 9 (이 숫자의 오름차순으로 구성된 도시) 이후로 끝나야합니다. 그러나 어떤 이유로 스캐너는 조건문의 scan.hasNextInt() 부분에서 매번 false를 반환합니다.

제안 사항? 이 스캐너의 입력 내의 다음의 토큰이 nextInt() 방법을 사용하여 디폴트 기수에 근거하는 int 값으로 을 해석 할 수있는 경우

답변

0

hasNextInt를위한 Javadoc는

true를 반환 말한다. 스캐너는 입력을 지나서 진행하지 않습니다.

즉, 다음 토큰이 "Charlestown"이면 false를 반환합니다. hasNextInt()을 확인하기 전에 스캐너에서 도시 이름을 읽어야합니다.

+0

감사합니다. 코드의 해당 부분이 수정되었습니다! –

관련 문제