【问题标题】:why does this for loop wordcount method not work in java为什么这个for循环wordcount方法在java中不起作用
【发布时间】:2013-11-12 17:23:39
【问题描述】:

谁能告诉我为什么这个 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 的值 = 我的搜索字符串。 如果有人可以提供帮助,我们将不胜感激 - 我敢肯定我正在做一些愚蠢的事情。 迪伦

【问题讨论】:

  • 最好使用以空格为分隔符的字符串拆分方法,并检查该数组的长度。
  • 你需要一个开始位置和一个结束位置才能通过子字符串获取一个char。

标签: java string for-loop substring wordsearch


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    按你的方式使用子字符串是行不通的。如果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;
    }
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        Read the docs:

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

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

        【讨论】:

          【解决方案5】:

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

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

          【讨论】:

            【解决方案6】:

            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)
            

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

            【讨论】:

              【解决方案7】:

              改变

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

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

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2013-12-13
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2022-06-17
                • 2019-07-23
                • 2011-02-12
                相关资源
                最近更新 更多