我需要读一个名为" 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
}
}
答案 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