2012-06-23 2 views
0

파일의 행 수를 토큰으로 분할하여 계산하고 싶습니다. 내 코드가 제대로 작동하지 않는 것 같아 누군가 조언을 해줄 수 있습니까? 미리 감사드립니다.회선 수, 토큰 화

import java.util.*; 
import java.io.*; 

public class kup 
{ 
    public static void main(String args[]) throws Exception 
    { 
     FileReader fileInput = new FileReader("C:\\save\\input.txt"); 
     BufferedReader readInput = new BufferedReader(fileInput); 

     FileWriter fileOutput = new FileWriter("C:\\save\\output.txt"); 
     PrintWriter outFile = new PrintWriter(fileOutput); 

     Scanner scanLine = new Scanner(readInput); 
     String textInput = scanLine.nextLine(); 
     StringTokenizer stringtokenizer = new StringTokenizer(textInput); 

     int tokenCount = stringtokenizer.countTokens(); 
     int lineCount = 0; 

     while(scanLine.hasNextLine()) 
     { 
      while(stringtokenizer.hasMoreTokens()) 
      { 
       String string = stringtokenizer.nextToken(); 
       outFile.println(string); 
      } 
       lineCount++; 
     } 

     outFile.println("Number of words: " +tokenCount); 
     outFile.println("Number of lines: " +lineCount); 

     readInput.close(); 
     outFile.close(); 
    } 

} 
+1

자바 7을 사용하는 경우가 너무 finally 블록을 독자/작가/스트림을 폐쇄, 또는 시도 -과 - 자원 문을 사용한다

String line; while ((line = readInput.readLine()) != null) { StringTokenizer tokenizer = new StringTokenizer(line); while (tokenizer.hasMoreTokens()) { String string = tokenizer.nextToken(); outFile.println(string); tokenCount++; } } 

주 일하니? –

+0

출력 파일에 결과가 출력되지 않는다는 것을 알고 있습니다. –

답변

5

첫 번째 줄만 사용하여 토크 나이저를 초기화합니다. 난 당신과 같이 할 생각 : 개인적으로는 아마 "라인으로 독서 라인"에 대한 BufferedReader 고수 할

int tokenCount = 0; 
int lineCount = 0; 

while (scanLine.hasNextLine()) 
{ 
    String line = scanLine.nextLine(); 
    StringTokenizer tokenizer = new StringTokenizer(line); 

    while (tokenizer.hasMoreTokens()) 
    { 
     String string = tokenizer.nextToken(); 
     outFile.println(string); 
     tokenCount++; 
    } 
} 

을 - 당신이 정말로 여기 Scanner의 세부 사항 중 하나를 사용하지. 그래서 '아무튼 이것에 대해 당신이

+0

대단히 고마워요. 작동하지만 아주 잘 이해하지 못했습니다. 선. 미안 해요 방금 자바를 배우기 시작했습니다. 미리 감사드립니다. –

+0

@ TokokiToua : 어디에서 문자열 토크 나이저를 작성하는지 살펴보십시오. 그런 다음 루프에서 tokenizer를 다시 초기화하지 않고 읽는 각 줄을 새로 만듭니다. 사실, 당신은'nextLine()'을 결코 호출하지 않습니다 - 나는 원래 코드가 전혀 종료 된 것에 놀랐습니다! –

+0

오, 알겠습니다. 사실 당신은 맞습니다. 나는 그것을 강제로 종결 시켰습니다. 바보 나. 다시 도움을 주셔서 감사합니다. –