**在审核了Tormod的回答并实施他的建议后编辑。
正如标题所述,我试图在从命令行输入接收文件名后打印不同单词的总数。尝试编译程序后,我收到以下消息:
注意:Project.java使用未经检查或不安全的操作。 注意:使用-Xlint重新编译:取消选中以获取详细信息。
这是我的代码。非常感谢任何帮助:
import java.lang.*;
import java.util.*;
import java.io.*;
public class Project {
public static void main(String[] args) throws IOException {
File file = new File(args[0]);
Scanner s = new Scanner(file);
HashSet lib = new HashSet<>();
try (Scanner sc = new Scanner(new FileInputStream(file))) {
int count = 0;
while(sc.hasNext()) {
sc.next();
count++;
}
System.out.println("The total number of word in the file is: " + count);
}
while (s.hasNext()) {
String data = s.nextLine();
String[] pieces = data.split("\\s+");
for (int count = 0; count < pieces.length; count++)
{
if(!lib.contains(pieces[count])) {
lib.add(pieces[count]);
}
}
}
System.out.print(lib.size());
}
}
答案 0 :(得分:1)
我将使用HashSet实现它添加所有单词,并读出大小。如果你想让它不区分大小写,只需将所有单词操作为大写或类似的东西。这会占用一些记忆但......
您使用该算法遇到的一个问题是您只有一个“单词”。它只保持同一行的单词。所以你只计算同一行的相同单词。
HashSet 按字节值存储字符串,因此只存储一个字。
构造:HashSet lib = new HashSet&lt;&gt;();
循环内部:if(!lib.contains(word)){lib.add(word);}
检查字数:lib.size()
答案 1 :(得分:0)
for(String s : words) {
if(s.equals(word))
count++;
}
你正在将这些单词与一个空字符串进行比较,因为它是一个单词,它总是会被假的。
与Tormod一样,最好的方法是将单词存储在HashSet中,因为它不会保留重复项。然后读出它的大小。