2015-02-11 4 views
1

Просто хотел бы сказать, что эта программа побеждала меня почти во всех отношениях. Что мне нужно сделать, это ввести .txt файл, который содержит этотПодсчет слов в текстовом файле?

Там должно быть 59 символов 13 слов и 6 линий в этом файле.

Не знаете, как отформатировать это до 6 строк.

Программа подсчитывает строки, но говорит, что есть 78 слов в текстовом файле, а не 13. Что является 6 * 13 = 78.

Как я могу получить его только читать строку один раз .. поэтому чтение 13 слов не 13 * 6. Программа, кажется, считает слова, которые много раз. (комментарии вводятся руководством для профессионалов).

package inputoutput; 

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

public class input { 

public static void main(String[] args) throws FileNotFoundException { 
    Scanner s = new Scanner(System.in); 
    String name; 
    int lineCount = 0; 
    int wordCount = 0; 


    System.out.println("Please type the file you want to read in: "); 
    name = s.nextLine(); 



    // create a Scanner object to read the actual text file 
    File input = new File("C:\\Users\\Ceri\\workspace1\\inputoutput\\src\\inputoutput\\" + name + ".txt"); 
    Scanner in = new Scanner(input); 


    while (in.hasNextLine()){ // enter while loop if there is a complete line available 

     // increase line counter variable 
     lineCount++; 


     // read in next line using Scanner object, inFile 
     in.nextLine(); 

     // create another Scanner object in order to scan the line word by word 
     Scanner word = new Scanner(input); 


     // use while loop to scan individual words, increase word counter 
     while(word.hasNext()){ 
      // increase word counter 
      wordCount++;  
      // Scanner move to next word 
      word.next(); 
     } 
     word.close(); 
     // count number of chars including space but not line break by using the length() method of the String class and increment character counter 

    } 

    in.close(); 
    System.out.print("Lines " + lineCount + " "+ "Words " + wordCount); 

} 
+0

Думаю, использование двух сканеров для 'input' создает проблему. Вы можете сделать это: взять. Строка oneline = in.nextLine. Используйте сканер на этом слове таким же образом. – frunkad

+0

Вам нужно переместить сканер слов за пределы цикла while для линейного сканера. Поскольку у вас есть это прямо сейчас, вы объявляете сканер слов и просматриваете весь файл для каждой строки в файле. – mstbaum

+0

@mstbaum ты мой спаситель. Я хотел окропить мои волосы, делая это. –

ответ

1

Проверьте это: How to use multiple Scanner objects on System.in?

Что вы должны сделать: возьмите одну строку из первого сканнера затем создать новый сканер с этой линией

String s = in.nextLine(); 
Scanner sc = new Scanner(s); 

Теперь итерацию таким же образом, как вы вторая петля

2

В вашем коде у вас есть следующее:

// read in next line using Scanner object, inFile 
in.nextLine(); 

// create another Scanner object in order to scan the line word by word 
Scanner word = new Scanner(input); 

вместо этого, изменить это:

// read in next line using Scanner object, inFile 
String nextline = in.nextLine(); 

// create another Scanner object in order to scan the line word by 
// word 
Scanner word = new Scanner(nextline); 
-1

Ready и протестирована.

public class input { 

public static void main(String[] args) throws FileNotFoundException { 
    Scanner s = new Scanner(System.in); 
    String name; 
    int lineCount = 0; 
    int wordCount = 0; 


System.out.println("Please type the file you want to read in: "); 
name = s.nextLine(); 



    // create a Scanner object to read the actual text file 
File input = new File("C:\\Users\\Ceri\\workspace1\\inputoutput \\src\\inputoutput\\" + name + ".txt"); 
s.close(); 

//-------------------- 
    //Count how many lines 
Scanner in = new Scanner(input); 
while (in.hasNextLine()){ 

    // increase line counter variable 
    ++lineCount; 
    in.nextLine(); 
} 
in.close(); //Close [in] Scanner 



//------------------------------  
//Count how many words 
Scanner word = new Scanner(input); 
while(word.hasNext()){ 

// increase word counter variable 
    ++wordCount; 
    word.next(); 
} 
word.close(); //close [word] Scanner 



System.out.print("Lines " + lineCount + " "+ "Words " + wordCount); 

}//end of main Method 


}//end of Class 

Сделать комментарий [если] он не работает для вас.

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