为什么这个for循环wordcount方法在java中不起作用

时间:2013-11-01 13:42:49

标签: java string for-loop substring wordsearch

任何人都可以让我知道为什么这个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 =我的搜索字符串的值。 非常感谢,如果有人可以提供帮助 - 我确信我会做一些愚蠢的事情。 迪伦

7 个答案:

答案 0 :(得分:3)

Read the docs:

  

子字符串以指定索引处的字符开头,并延伸到此字符串的末尾。

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

答案 1 :(得分:3)

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

答案 2 :(得分:1)

this.getString()。substring(i) - &gt;这将返回从索引i到String

末尾的子字符串

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

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

this.getString().substring(i)

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

执行您尝试做的事情的另一种方法是:

this.getString().split(spaceString)

这会返回一个字符串数组 - 原始字符串被空格分隔。

答案 3 :(得分:1)

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

即。只有在字符串末尾有空格

时,计数才会为非零

答案 4 :(得分:1)

使用子字符串将无法正常工作。如果getString()的值是“我的搜索字符串”,则每次迭代循环都有子字符串(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;
}

答案 5 :(得分:0)

更改

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

if (this.getString().charAt(i) == ' ')

答案 6 :(得分:0)

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

如果你在整个代码中使用System.out.println()(或使用调试器),你会看到这一点。 我认为使用像String.split()或charAt(i)这样的东西会更好。

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