2014-02-16 3 views
0

필자는 입력 줄이있는 텍스트 파일에 스캐너를 반환하는 방법이 있습니다. 제대로 표시 할 수는 없지만 - 안녕하세요 (새 줄) This (\ n) Is \ n) Me (\ n)). 그런 다음 주에서는 필자는 스캐너를 사용하여 입력 줄 수를 계산 한 다음 스캐너를 다시 설정했습니다. 나중에 (내가 ArrayList를 원하지 않는다) 배열로 입력의 라인을 넣어 스캐너를 사용하지만, 자바는 "java.util.NoSuchElementException : 찾을 수 없습니다 라인"라고 ...Java의 스캐너 문제

while(scanner.hasNextLine()){ 
    numOfStrings++; 
    scanner.nextLine(); 
} 

scanner.reset(); 
String[] stringsOfInput = new String[numOfStrings]; 
for(int i = 0; i < numOfStrings; i++){ 
    String s = scanner.nextLine(); //returns "No line found" error message 
    stringsOfInput[i] = s; 
} 

사람을합니까 이 문제를 해결하는 방법을 알아야합니다.

+2

와 샘플'재설정()'당신이하지 생각하지 않는다 - http://docs.oracle.com/javase/7합니다 ([JavaDoc을]에서 /docs/api/java/util/Scanner.html#reset%28%29) - 스캐너를 리셋하면 (자),'useDelimiter (java.util.regex.Pattern)'의 호출로 변경되었을 가능성이있는 명시적인 상태 정보는 모두 파기됩니다. ,'useLocale (java.util.Locale)','useRadix (int)'._'스캐너를 리셋하는 것은 스트림을 되 감을 수 없다. –

+1

나중에 라인을 저장하기 위해 다른 스캐너가 필요하다고 생각합니다. 재설정은 시작 부분에서 파일을 시작하지 않습니다. – Evans

답변

2

다음 배열 (String[] stringsOfInput = myArrayList.toArray(new String[myArrayList.size()]);)에 해당합니다 ArrayList<String>에 줄을 추가하는 것이 작업을 수행하는 가장 다양한 방법

+0

또는 'List'를 직접 사용하고 메모리와 CPU 틱을 낭비하지 마십시오. –

+0

물론, , 이상적이어야하지만 OP는 "배열에 입력 (나는 ArrayList를 원하지 않는다)" – GreySwordz

+0

하지만 아마도'List'는 괜찮습니다 ... 하! 나는 당신의 대답보다 OP에 더 많은 코멘트를하고있었습니다. –

0

당신은 잠시 내에서 루프의 내용을 넣어 시도 할 수 있습니다. 그렇게하면 파일의 한 루프에서 문자열 수와 각 문자열을 얻을 수 있습니다.

편집 : ArrayList를

ArrayList<String> stringsOfInput = new ArrayList<String>(); 

while(scanner.hasNextLine()) 
{ 
    stringsOfInput.add(scanner.nextLine()); 
    numOfStrings++; 
} 
+0

배열이 아니라 ArrayList를 사용하고 있기 때문에 인덱스 0에 아무 것도 없기 때문에 Java에서 허용하지 않으므로 입력 줄을 삽입 할 수 없습니다. 배열의 크기를 알 필요가 있기 때문에'String [] s = new String [?]'그리고 THEN이 입력에 넣을 수 있습니다 -하지만'String [] s = {};만으로는 할 수 없습니다 그. – javaChipFrapp

+0

배열을 사용해야 할 경우 GreySwordz와 같이 ArrayList 을 사용할 수 있습니다. ArrayList는 Array처럼 고정되어 있지 않습니다. 샘플 코드로 수정 된 답변. – jmw5598