Java用indexof在汉字中查找汉字出现的次数?

例如字符串“字符串对象创建后不能对该字符串的字符做修改”中“字符”出现的次数,怎么修改?

这代码存在的问题,集中在循环代码块里(2个错误和1个没有遵循的规范); 我会在指出问题后,写出比较规范的参考代码;

1. 明显的错误: 第10行代码会出现下标越界异常 ;

因为str.substring(i,i+2) ;其中 当i+2大于了字符串的长度时,就会抛出该异常

解决办法: for (int i = 0; i < str.length()-1;i++ ) { //在for循环的条件里.i<str.length()-1.就可以了.

2. 隐藏错误: 思维逻辑上的错误. 

        比如在"AAA"中包含有几个字符串"AA"  , 有的人说2 个. 有的人说1个;

        其实这个争议的焦点是: 用过的字符串,能否再次被使用;

        严谨的逻辑,就是用过的字符串, 不在使用了, 所以查找到子字符串了,那么下次查找就要跳过刚才的子字符串; 也就说"AAA"中"AA"出现的次数只有1次. 

解决办法: 在count++;后面添加一行代码i=(i+2)-1;

3. 代码存在的其他问题: 违反了java开发手册,使用了太多的魔法值(未经定义的常量)

    比如 i+2 ;这里的2代表什么含义? 为什不是i+1或者i+3?

    当然了慢慢读代码会知道i+2;代表的是i+"字符".length(); 但是阅读起来太麻烦.下次要查找的字符串不是2个字符,而是3个字符. 那么又需要频繁的修改

    参考代码1:(使用while循环: 推荐该方法,循环次数较少)

public class Test1 {

    public static void main(String[] args) {

        String str = "字符串对象创建后不能对该字符串的字符做修改字符"; //字符串

        String keyWords = "字符"; //需要寻找的关键字

        int fromIndex = 0;//搜索的下标

        int count = 0;//关键字出现的次数

        //str.indexOf(KeyWords,fromIndex)代表 在str中搜索keyWords,位置从fromIndex开始搜索

        while ((fromIndex = str.indexOf(keyWords, fromIndex)) != -1) {

            fromIndex += keyWords.length();//如果查找到了,那么把搜索位置往后挪动

            count++;//出现次数+1

        }

        System.out.println(count);//打印次数

    }

}

-----------------分割线---------------------------------

    参考代码2:(使用for循环;循环的次数较多)

public class Test2 {

    public static void main(String[] args) {

        String str = "字符串对象创建后不能对该字符串的字符做修改字符"; //字符串

        String keyWords = "字符"; //需要寻找的关键字

        int keyLen = keyWords.length();//关键字的长度

        int count = 0;//关键字出现的次数

        for (int i = 0; i <= str.length() - keyLen; ) {

            if (str.substring(i, i + keyLen).indexOf(keyWords) != -1) { //如果查找到了

                i = i + keyLen;//因为执行完循环后.下次循环开始的下标=现在下标+长度

                count++;

            } else {//如果没有查找到

                i++;

            }

        }

        System.out.println(count);

    }

}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-12-09
for (int i = 0; i < str.length()-1; i++)本回答被提问者采纳
相似回答