打印文件中不同单词的总数(区分大小写)
Print Total Number of Different Words (case sensitive) from a file
**在查看 Tormod 的回答并实施他的建议后进行编辑。
如标题所述,我试图在从命令行输入接收到文件名后打印不同单词的总数。我在尝试编译程序后收到以下消息:
注意:Project.java 使用未经检查或不安全的操作。
注意:使用 -Xlint:unchecked 重新编译以获取详细信息。
这是我的代码。非常感谢任何帮助:
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());
}
}
我会用一个HashSet来实现 添加所有的单词,然后读出大小。如果你想让它不区分大小写,只需将所有单词操作为大写或类似的东西。这会占用一些内存但是...
算法的一个问题是你只有一个 "words"。它只包含同一行的单词。所以你只计算同一行的相同单词。
HashSet按哈希值存储字符串,因此一个单词只存储一次。
构造:HashSet lib = new HashSet<>();
循环内部:if(!lib.contains(word)){lib.add(word);}
检查字数:lib.size()
for(String s : words) {
if(s.equals(word))
count++;
}
您正在将单词与空字符串进行比较,因为它是一个单词,所以它总是会是假的。
就像 Tormod 说的,最好是将单词存储在 HashSet 中,因为它不会保留重复项。然后读出它的大小。
**在查看 Tormod 的回答并实施他的建议后进行编辑。
如标题所述,我试图在从命令行输入接收到文件名后打印不同单词的总数。我在尝试编译程序后收到以下消息:
注意:Project.java 使用未经检查或不安全的操作。 注意:使用 -Xlint:unchecked 重新编译以获取详细信息。
这是我的代码。非常感谢任何帮助:
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());
}
}
我会用一个HashSet来实现 添加所有的单词,然后读出大小。如果你想让它不区分大小写,只需将所有单词操作为大写或类似的东西。这会占用一些内存但是...
算法的一个问题是你只有一个 "words"。它只包含同一行的单词。所以你只计算同一行的相同单词。
HashSet按哈希值存储字符串,因此一个单词只存储一次。
构造:HashSet lib = new HashSet<>();
循环内部:if(!lib.contains(word)){lib.add(word);}
检查字数:lib.size()
for(String s : words) {
if(s.equals(word))
count++;
}
您正在将单词与空字符串进行比较,因为它是一个单词,所以它总是会是假的。
就像 Tormod 说的,最好是将单词存储在 HashSet 中,因为它不会保留重复项。然后读出它的大小。