计算文件中的单词数,然后将结果写入另一个文件

时间:2015-11-25 18:32:54

标签: java file-io printwriter

我需要读一个名为" input.txt"的文件。然后计算该文件中的单词。然后我必须将它们写入另一个名为output.txt的文件中。

Ex:input.txt有以下单词"快速快速棕狐"

output.txt应如下所示:

1

2快速

3棕色

4福克斯

到目前为止,我有以下代码,但不知道我是否在正确的道路上。

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.Scanner;

public class CountWords {
public static void main(String[] args) throws FileNotFoundException {

    File file = new File("input.txt");
    Scanner sc = new Scanner(new FileInputStream(file));
    PrintWriter writer = new PrintWriter("output.txt");
    int count = 0;
    while (sc.hasNext()) {
        String word = sc.next();
        if (word.indexOf("\\") == -1){
            count++;
            writer.printf("%3d",count + " " + word);  //should print ----> |   # word|

        }
        break;
    }
    writer.close(); //close print writer
    sc.close();    //close input file
}

}

2 个答案:

答案 0 :(得分:0)

假设单词是由空格分隔的字符,您可以轻松使用流API来计算文件中的单词数:

 final long count = Files.lines( Paths.get( "myFile.txt") )
                         .flatMap( line -> Stream.of( line.split( "[ ]+" ) ) )
                         .collect( Collectors.counting( ) );

如果你需要按字重新分配:

final Map<String, Long> collect =
    Files.lines( Paths.get( "myFile.txt" ) )
         .flatMap( line -> Stream.of( line.split( "[ ]+" ) ) )
         .map( String::toLowerCase ) // to count quick and QUICK as same
         .collect( Collectors.groupingBy( Function.identity( ), Collectors.counting( ) ) );

其中地图的关键字是单词,而值是文件中该单词的编号

答案 1 :(得分:0)

我假设您的文件是文本文件,因为您说input.txt。现在,到实际代码:

Scanner scn = new Scanner(file); //Where file is your file
HashMap<String, Integer> words = new HashMap<>(); //Where you will be saving your words
while(scn.hasNext()){
    String str = scn.next().toLowerCase();
    words.put(str, words.containsKey(str)?words.get(str)+1:1);
}

现在您拥有words地图,其中包含所有单词及其出现的#。 将它们写入另一个文件:

String build = "";
for(String str : words.keySet()){
    if(build!="")build+="\n";
    build+=words.get(str)+" "+str;
}
BufferedWriter bw = new BufferedWriter(new FileWriter(outputfile.getAbsoluteFile()));
bw.write(build);
bw.close();

示例: 让我们假设您有一个input.txt,其中包含以下内容:

The quick brown fox JUMPED over jumped the lazy brown DOG QUICK dog

现在,扫描仪将遍历每个单词,因为默认的分隔符为''(空格),并为每个单词的索引添加1。但由于我们标记了word.toLowerCase(),JUMPED和jumped将被视为相同。

之后,我们将输出写入另一个文件,在运行代码后将如下所示:     2

2 quick

2 brown

1 fox

2 jumped

1 lazy

2 dog