这代码存在的问题,集中在循环代码块里(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);
}
}
Java用indexof在汉字中查找汉字出现的次数?
int count = 0;\/\/关键字出现的次数 \/\/str.indexOf(KeyWords,fromIndex)代表 在str中搜索keyWords,位置从fromIndex开始搜索 while ((fromIndex = str.indexOf(keyWords, fromIndex)) != -1) { fromIndex += keyWords.length();\/\/如果查找到了,那么把搜索位置往后挪动 count++;\/\/出现次数+1 } Sys...
如何获取Java中一个String字符串中的某一个字符的“索引值”?
在一个String字符串中 查找某个汉字的索引 可以使用str.indexOf("字") 获取在字符串中的索引位置,同样索引从0开始,若字符串中没有该汉字, 返回-1就行了。Java Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC...
插入unicode控制字符里面的那些英文都是什么意思?
int idx=s.indexOf((int)'J');第二个方法查找字符ch时,在当前字符串中自fromIndex位字符之后向后查找,并返回该字符首次出现的位置。下面语句将查找处指定字符在字符串中的所有出现位置:String s="java是面向对象的语言,javaScript是脚本语言";int i=-1;do{ i=s.indexOf((int)'a',i++); system.out.pr...
正则表达式“或“的使用
正则表达式,又称规则表达式。是计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。许多程序设计语言都支持利用正则表达式进行字符串操作。例如,在Perl中就内建了一个功能强大的正则表达式引擎。正则表达式这个概念最初是由Unix中的工具软件(例如sed和grep)普及开的。正则...
谁知道字符串是什么意思的?
我也不知道,不过我想大概是一串字符的意思,一个“a”就是一个字符,应该是char吧。两个“a”就成了“aa”那就是一串字符了,这就叫字符串了吧(string),我想
jsp 页面 下拉框中的值从数据库中取得 输入汉字拼音首字母 可取到匹配...
if (index == elm.length) index = 0;if (index == elm.selectedIndex) return false; \/\/ 未找到匹配的选项,则退出 } while (key2Char(event.keyCode) != getPinYin(getItemKeyChar(elm.options[index++])));elm.selectedIndex = index - 1; \/\/ 选中匹配的选项 return false; \/\/ 取消原...
Java基础面试题都有哪些?
怎样实现将GB2312编码的字符串转换为ISO-8859-1编码的字符串。 9.Java中访问数据库的步骤,Statement和PreparedStatement之间的区别。 10.找出下列代码可能存在的错误,并说明原因: 二、JSP&Servlet技术 1.描述JSP和Servlet的区别、共同点、各自应用的范围 2.在Web开发中需要处理HTML标记时,应做什么样的...