当我尝试计算一个单词出现在TXT文件中的次数时,我遇到了问题。
当我选择文件时,文件的内容会显示在区域中。然后我输入 txta 中的单词进行搜索。然后我点击 btn ,但代码不起作用。
public int contarPalabras(String chain, String word) {
// English translation:
// Receive a string and a word and return the amount of times
// that the word was found in the string.
// If the letter is not found, return (-1).
int cant = 0;
int intIndex = chain.indexOf(word);
if (intIndex == -1) {
cant = -1;
} else {
cant = intIndex;
}
return cant;
}
答案 0 :(得分:4)
commons-lang有StringUtils.countMatches(str, sub)
,它完全符合您的要求。
答案 1 :(得分:3)
阅读String.indexOf(string)
的文档。它没有做你认为它做的事情。它仅返回参数的第一次出现的索引。
为了让它发挥作用你可以做这样的事情:
public int countWord(String chain, String word){
if("".equal(word)){
throw new IllegalArgumentException("word is empty string"); // error when word is empty string
}
index = 0;
count = 0;
while (index != -1){
int found = chain.indexOf(word, index);
if(found != -1){
count++;
index = found + word.length();
}
}
return count;
}
修改强>
如果你真的只想计算完整的单词(即从两边用空格分隔的子串),这个版本会更有用:
public int countWord(String chain, String word){
if("".equal(word)){
throw new IllegalArgumentException("word is empty string"); // error when word is empty string
}
index = 0;
count = 0;
word = " " + word + " ";
while (index != -1){
int found = chain.indexOf(word, index);
if(found != -1){
count++;
index = found + word.length() - 1;
}
}
return count;
}
答案 2 :(得分:0)
我认为给出的2个答案会产生以下问题: 在文中:“周六和周日是我最喜欢的日子”,如果你搜索“天”,它将返回:3因为它将匹配Satur 天,Sun 天和的天即可。 我假设您只想匹配天
在这种情况下你必须使用正则表达式,这是答案:
public int countWord(String chain, String word){
Pattern p = Pattern.compile("\\b" + word + "\\b");
Matcher m = p.matcher(chain);
int count = 0;
while(m.find()) {
count++;
}
return count;
}