问题 1:
我正在尝试计算关键字的频率,我的代码有效,但它也计数那些也包含关键字的单词(例如,如果我搜索"count",则像"帐户"这样的单词也会被计算在内。有人知道如何解决这个问题吗?
问题2:
我还想计算文本中唯一单词的数量(这意味着我只计算一次重复单词)。我也不知道如何实现这一目标。我的代码只给了我总字数。
这是我的代码:
import java.util.Scanner;
public class Text_minining {
/**
* @param args
*/
public static void main(String[] args) {
//Prompt the user for the search word
System.out.print("enter a search word: ");
//Get the user's search word input
Scanner keywordScanner = new Scanner(System.in);
String keyword = keywordScanner.nextLine();
keyword = keyword.toLowerCase();
//Prompt the user for the text
System.out.println("Enter a string of words (words separated by single spaces or tabs): ");
//Get the user's string input
Scanner userInputScanner = new Scanner(System.in);
String userInput = userInputScanner.nextLine();
userInput = userInput.toLowerCase();
int keywordCount = 0, wordCount = 0;
int lastIndex = 0;
while(lastIndex != -1){
lastIndex = userInput.indexOf(keyword,lastIndex);
if(lastIndex != -1){
keywordCount ++;
lastIndex = keyword.length() + lastIndex;
}
}
boolean wasSpace=true;
for (int i = 0; i < userInput.length(); i++)
{
if (userInput.charAt(i) == ' ') {
wasSpace=true;
}
else{
if(wasSpace == true) wordCount++;
wasSpace = false;
}
}
//Print the results to the screen
System.out.println("-------");
System.out.println("Good, "" + keyword + ""appears in the text and the word count is " + keywordCount);
System.out.println("The total number of unique words in the text is " + wordCount);
System.exit(0);
}
}
首先:userInput.split(keyword).length - 1
会解决问题。我们使用正则表达式。
第二:
Set<String> uniqueWords = new HashSet<String>();
for (String word : userInput.split(" ")) {
uniqueWords.add(word);
}
System.out.println("Unique words count " + uniqueWords.size());
只需使用字符串方法拆分。
String words[] = userInput.split(keyword);
然后检查并计算关键字...
for ( String w : words) {
// do check
}
同意。使用拆分创建数组,然后您可以使用
(new HashSet(Arrays.asList(yourArray))).size();
查找计数
我建议你这种方法:
- 用空格拆分
userInput
字符串:userInput.split("\s+")
。你会得到一个数组。参见 String.split() - 对于问题 1:遍历数组,将每个字符串与您的关键字进行比较。请参阅 String.equals() 和 String.equalsIgnoreCase()。
- 对于问题 2:将数组添加到 Set。由于它不能包含任何重复的项目,因此它的大小将为您提供答案。