我需要计算字符串中的单词。对于你们中的许多人来说,这看起来非常简单,但从我在类似问题中读到的人们所说的使用数组但我宁愿不这样做。由于我的字符串来自输入文件并且程序无法硬连线到特定文件,因此它使我的程序比它有用更复杂。
到目前为止,我有这个:
while(input.hasNext())
{
String sentences = input.nextLine();
int countWords;
char c = " ";
for (countWords = 0; countWords < sentences.length(); countWords++)
{
if (input.hasNext(c))
countWords++;
}
System.out.println(sentences);
System.out.println(countWords);
}
问题在于我所拥有的最终会计算字符串中的字符数量。我以为它会把char c算作分隔符。我也尝试使用String c而不是input.hasNext,但编译器告诉我:
Program04.java:39: incompatible types
found : java.lang.String[]
required: java.lang.String
String token = sentences.split(delim);
我已经从程序中删除了.split方法。 如何在不使用带有扫描文件的String数组的情况下划分(是正确的单词?)?
答案 0 :(得分:1)
不要将扫描仪(input
)用于多件事。您正在使用它来读取文件中的行,并尝试使用它来计算这些行中的单词。使用第二个扫描仪来处理线本身,或使用其他方法。
问题是扫描程序在读取时会消耗其缓冲区。 input.nextLine()
会返回sentences
,但之后不再拥有它们。在其上调用input.hasNext()
会在 sentences
之后为您提供有关字符的信息。
计算sentences
中单词的最简单方法是:
int wordCount = sentences.split(" ").length;
使用扫描仪,您可以:
Scanner scanner = new Scanner(sentences);
while(scanner.hasNext())
{
scanner.next();
wordCount++;
}
或者使用for循环以获得最佳性能(如BlackPanther所述)。
我给你的另一个提示是如何更好地命名你的变量。 countWords
应为wordCount
。 “计数单词”是一个命令,一个动词,而一个变量应该是一个名词。 sentences
应该只是line
,除非您知道两者该行由句子组成,并且这一事实与您的其余代码相关。
答案 1 :(得分:1)
也许,这就是你要找的东西。
while(input.hasNext())
{
String sentences = input.nextLine();
System.out.println ("count : " + line.split (" ").length);
}
答案 2 :(得分:0)
你想要达到的目标并不十分清楚。但如果您要计算文本文件中的单词数,请尝试使用
int countWords = 0;
while(input.hasNext())
{
String sentences = input.nextLine();
for(int i = 0; i< sentences.length()-1;i++ ) {
if(sentences.charAt(i) == " ") {
countWords++;
}
}
}
System.out.println(countWords);