2012-06-23 3 views
0

Я хотел бы подсчитать количество строк в файле, разбив его на токены. Кажется, я не могу заставить мой код работать, может кто-то, пожалуйста, посоветуйте. Заранее спасибоcount количество строк, tokenizing

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

Что об этом Безразлично» т работы? –

+0

он не распечатывает результат по выходному файлу, я думаю, что его запаздывание или какой-то вид, –

ответ

5

Вы только инициализируете токенизатор с самой первой строкой. Я подозреваю, что вы хотите что-то вроде:

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++; 
    } 
} 

Лично я бы, вероятно, придерживаться BufferedReader для «чтения построчно» - вы на самом деле не с помощью какой-либо из деталей Scanner здесь. Итак:

String line; 
while ((line = readInput.readLine()) != null) 
{ 
    StringTokenizer tokenizer = new StringTokenizer(line); 

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

Обратите внимание, что вы должны закрыть ваши читателей/писателей/потоков, наконец, блоки также, или с помощью оператора примерочных с-ресурсов, если вы используете Java 7.

+0

Большое спасибо, это сработало, но я не совсем понимаю, что вы подразумеваете, вы сказали, что im просто инициализирует мой токенизатор с первым линия. Мне жаль, что я только начинаю изучать Java. заранее спасибо –

+0

@TokuchiToua: Посмотрите, где вы создаете токенизатор строк - вы проходите в строке. Вы тогда * не * повторно инициализируете токенизатор в цикле, с каждой новой строкой, которую вы читаете. На самом деле, вы даже не называете 'nextLine()' - я удивлен, что исходный код вообще оканчивается! –

+0

о, я вижу. на самом деле ты прав, я просто вынужден ее прекратить. дурак я. Спасибо еще раз за помощь. –

Смежные вопросы