【问题标题】:String indexOf method is not working for first character in the String字符串 indexOf 方法不适用于字符串中的第一个字符
【发布时间】:2018-03-27 05:44:25
【问题描述】:

我正在实现一个代码,用于计算字符串中所有字符的出现次数。我使用 indexOf() 方法来检查事件。但它不适用于第一个角色。 以下代码适用于除第一个字符之外的所有字符。

public static void main(String[] args) {
        String str = "simultaneously";
        int[] count = new int[str.length()]; //counter array

        for (int i = 0; i < count.length; i++) { //initializing counters
            count[i] = 0;
        }

        for (int i = 0; i < str.length(); i++) {
            int index = -1;
            char c = str.charAt(i);
            while (1 > 0) {

                if (str.indexOf(c,index) > 0) {  //This is not working for 
                                                 //the first characters
                    index = str.indexOf(c, index) + 1;
                    count[i]++;
                } else {
                    break;
                }
            }
        }

        for (int i = 0; i < count.length; i++) {
            System.out.println(str.charAt(i) + " occurs " + count[i] + " times");
        }
    }

【问题讨论】:

  • 条件while (1 &gt; 0)最好写成while(true)
  • 无需将数组元素初始化为零:Java按规范将新数组的元素初始化为默认值,int的默认值为零。

标签: java string indexof


【解决方案1】:

java中数组的索引从0开始。 从

更改条件
if (str.indexOf(c,index) > 0) {

if (str.indexOf(c,index) >= 0) {

另外,初始化计数器的for循环是多余的,默认情况下,int数组中的所有值都初始化为0。

【讨论】:

    【解决方案2】:

    str.indexOf(c,index) 将返回0 作为第一个字符,但您的条件检查是否str.indexOf(c,index) &gt; 0。将其更改为str.indexOf(c,index) &gt;= 0

    【讨论】:

      【解决方案3】:

      还有一些事情你需要知道

      str.indexOf(c,index)
      

      将从索引'index'中搜索字符c,在您的情况下为-1,因为第一个字符永远不会找到它,因为字符串的起点是0 也改变你的条件如下

      str.indexOf(c,index) >= 0
      

      【讨论】:

        【解决方案4】:

        数组和字符串(字符数组)的索引在 Java 中总是从 0 开始。

        您还想检查位置 0,因此包括 >=。

               if (str.indexOf(c,index) >= 0) {
        

        此外,使用中断有时会让人感到困惑。 在你的代码中,你的 while 循环是一个无限的 True,然后你在必要时打破它。

        看看下面的这段代码。它与您想要完成的目的相同。 它更干净更清晰,因为它从 while 循环中删除了中断,您只需检查语句是否在 while 循环的开头而不是在循环内部为 True。

                for (int i = 0; i < str.length(); i++) {
                    int index = 0;
                    char c = str.charAt(i);
                    while (str.indexOf(c,index) >= 0) {
                        index = str.indexOf(c, index) + 1;
                        count[i]++;
                    }
                }
        

        【讨论】:

          猜你喜欢
          • 2020-07-02
          • 2018-12-01
          • 2019-08-26
          • 1970-01-01
          • 1970-01-01
          • 2012-05-08
          • 2018-07-22
          • 1970-01-01
          • 2016-06-09
          相关资源
          最近更新 更多