我有一个文本文件,我想计算我定义的特定单词的总数。
我的代码:
String word1 = "aa";
String word2 = "bb";
int wordCount = 0;
//creating File instance to reference text file in Java
File text = new File("D:/project/log.txt");
//Creating Scanner instnace to read File in Java
Scanner s = new Scanner(text);
//Reading each line of file using Scanner class
while (s.hasNext()) {
totalCount++;
if (s.next().equals(word1) || s.next().equals(word2)) wordCount++;
}
System.out.println("Word count: " + wordCount);
然而,它只计算'aa'的数量。它不计算'bb'的数量。 可能是什么问题?
答案 0 :(得分:3)
正如其他人说的那样:你打电话给next()两次的问题的根源。只是提示如何使你的算法易于扩展:
Set<String> words = new HashSet<>(Arrays.asList("aa", "bb"));
...
while (s.hasNext()) {
totalCount++;
if (words.contains(s.next())) wordCount++;
}
答案 1 :(得分:2)
您在s.next()
条件下拨打if
两次,每次通话都会转到下一个字。
将while循环更改为
while (s.hasNext()) {
totalCount++;
String word = s.next();
if (word.equals(word1) || word.equals(word2)) wordCount++;
}
答案 2 :(得分:1)
尝试这种方式:
while (s.hasNext()) {
totalCount++;
String word = s.next()
if (word.equals(word1) || word.equals(word2)) wordCount++;
}
答案 3 :(得分:1)
每次拨打s.next()
时,它都会找到下一个字,因此每个循环都会测试一个字是否是&#34; aa&#34;或者下一个单词是&#34; bb&#34;。在循环中,您需要调用s.next()
,将结果存储在变量中,然后用两个单词检查。
答案 4 :(得分:1)
您的问题是您要拨打s.next()
两次。每次调用都会从输入中读取一个新令牌。
将其更改为:
while (s.hasNext()) {
String str = s.next();
totalCount++;
if (str.equals(word1) || str.equals(word2)) wordCount++;
}
答案 5 :(得分:1)
你在if条件下调用next()两次。
尝试:
String word = s.next();
if ( word.equals(word1) ....
答案 6 :(得分:0)
String[] array = new String[]{"String 1", "String 2", "String 3"};
for(int i=0; i < array.length; i++)
{
System.out.println(array[i]);
wordCount=0;
while (s.hasNext())
{
totalCount++;
if (s.next().equals(array[i]))
wordCount++;
}
System.out.println("each Word count: " + wordCount);
}