1

谁能告诉我为什么这个 wordsearch 方法不起作用 -每次运行时count的返回值都是 0。

public int wordcount(){
    String spaceString = " ";
    int count = 0;
    for(int i = 0; i < this.getString().length(); i++){
        if (this.getString().substring(i).equals(spaceString)){
            count++;

        }
    }
    return count;
}

getString 的值 = 我的搜索字符串。如果有人可以提供帮助,我们将不胜感激 - 我敢肯定我正在做一些愚蠢的事情。迪伦

4

7 回答 7

3

阅读文档:

子字符串以指定索引处的字符开始并延伸到该字符串的末尾。

if如果字符串的最后一个字符是空格,则您的条件只有一次为真。也许你想要charAt?(即使这样也不能正确处理双空格;在空格上分割可能是更好的选择。)

于 2013-11-01T13:47:26.937 回答
3

因为只有一个参数的子字符串返回从该索引开始到字符串结尾的子字符串。所以你不是只比较一个角色。代替子字符串将 spaceString 定义为 char,并使用 charAt(i)

于 2013-11-01T13:48:24.087 回答
1

this.getString().substring(i) -> this 返回从索引 i 到字符串末尾的子字符串

因此,例如,如果您的字符串是 Test 上面将返回 Test、est、st 和最后 t

对于您正在尝试做的事情,有其他方法,但您可以简单地替换

this.getString().substring(i)

spaceString.equals(this.getString().charAt(i))

做你想做的事情的另一种方法是:

this.getString().split(spaceString)

这将返回一个字符串数组 - 由空格分隔的原始字符串。

于 2013-11-01T13:47:04.123 回答
1

阅读您正在使用的方法的文档: http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#substring(int)

即,仅当字符串末尾有空格时,计数才会非零

于 2013-11-01T13:47:11.030 回答
1

像你一样使用子字符串是行不通的。如果 的值getString()是“我的搜索字符串”,则循环中的每次迭代都有 substring(i) 返回:

my search string
y search string
 search string
search string
earch string
arch string
rch string
ch string
h string
 string
string
tring
ring
ing
ng
g

请注意,这些都不等于“”。

尝试使用拆分。

public int countWords(String s){
    return s.split("\\s+").length;
}
于 2013-11-01T14:00:32.637 回答
0

改变

if (this.getString().substring(i).equals(spaceString))

if (this.getString().charAt(i) == ' ')
于 2013-11-01T13:46:58.417 回答
0

this.getString().substring(i) 返回从 (i) 的索引到字符串末尾的字符串。示例:对于 i=5,它将从字符串“棕牛”返回“棕牛”。这个功能不是你需要的。

如果您在整个代码中使用 System.out.println()(或使用调试器),您将看到这一点。我认为最好使用 String.split() 或 charAt(i) 之类的东西。

顺便说一句,即使你通过计算空格来修复你的代码,它也不会为这些条件返回正确的值:“my dog”(字数=2)和“cow”(字数=1)。如果单词之间有多个空格,也会出现问题。此外,这将产生三个单词:“the cow”。

于 2013-11-01T13:55:09.617 回答