String indexOf方法不适用于String中的第一个字符

时间:2018-03-27 05:44:26

标签: java string indexof

我正在实现一个代码,用于计算String中所有字符的出现次数。我使用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");
        }
    }

4 个答案:

答案 0 :(得分:7)

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

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

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

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

答案 1 :(得分:6)

str.indexOf(c,index)会为第一个字符返回0,但您的条件会检查str.indexOf(c,index) > 0是否为str.indexOf(c,index) >= 0。将其更改为{{1}}。

答案 2 :(得分:2)

还有一些你需要知道的事情

str.indexOf(c,index)

将从索引&#39;索引&#39;中搜索字符c在你的情况下,对于第一个字符,它是-1,它永远不会找到它,因为字符串的起点是0 也改变你的状况如下

str.indexOf(c,index) >= 0

答案 3 :(得分:2)

数组索引和字符串(字符数组)总是从Java开始为0.

您还想检查位置0,因此请包含&gt; =。

       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]++;
            }
        }