黑马程序员技术交流社区

标题: 有段代码一直不明真相 [打印本页]

作者: 于潇    时间: 2012-5-9 08:02
标题: 有段代码一直不明真相
  1. class StringTest2
  2. {
  3. public static int getSubCount(String str,String key)
  4. {
  5. int count = 0;
  6. int index = 0;

  7. while((index=str.indexOf(key))!=-1) //这里为什么是-1?
  8. {
  9. sop("str="+str);
  10. str = str.substring(index+key.length());

  11. count++;
  12. }
  13. return count;
  14. }
复制代码
一直想不通,不是说只要大于等于零就可以么?
作者: 胡生蒙    时间: 2012-5-9 08:15
这里是在判断字符串str是否包含key这个字符串,str.indexOf(key)如果字符串参数作为一个子字符串在此对象中出现,则返回第一个这种子字符串的第一个字符的索引;如果它不作为一个子字符串出现,则返回 -1。

作者: 曹魁    时间: 2012-5-9 08:37
方法Indexof返回第一次找到目标,如果没有找到目标就需要返回-1,指定位置继续往回找。
如:
String str1="cdesada"
str1.indexOf("cde");

作者: 赵玮_Tom    时间: 2012-5-9 08:50
因为是API中指定的。如果找不到对应的元素,indexOf()方法就返回-1。你也可以反向思考:如果存在要找的字符,肯定不会返回-1,那么如果返回了-1,就说明不存在要找的字符。
作者: 彩虹    时间: 2012-5-9 09:17
本帖最后由 万章云 于 2012-5-9 10:50 编辑

while((index=str.indexOf(key))!=-1) //这里为什么是-1?
{
   sop("str="+str);
   str = str.substring(index+key.length());
}
查找数组时,如果没有找到与给定键值相同的元素则返回 -1; 这里的indexOf()方法就是实现查找数组的功能,只有找到了与给定
键值相同的元素,返回值才不可能为-1,循环才可以进行下去,才可以进行str = str.substring(index+key.length()) ;截子串的动作。
而大于等于零一般是针对for循环,用于输出数组中的值。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2