黑马程序员技术交流社区

标题: 字符串查找的问题 [打印本页]

作者: 梁志兵    时间: 2013-4-5 21:50
标题: 字符串查找的问题
class StrigTest3
{
public static void main(String[] args)
{
int count =getCount("afrbcfrtyhgtfrbgfrd","fr");
   
System.out.println("count="+count);
}
    public static int getCount(String str,String sub)
    {
  int count=0;
  int index=0;
  while ((index = str.indexOf(sub))!=-1)//对于这个while语句的作用不是很明白,请高手指点
  {
          str = str.substring(index+sub.length(),str.length());
    count++;
  }
  return count;
    }
}
作者: lucy198921    时间: 2013-4-5 22:02
while ((index = str.indexOf(sub))!=-1)

指定字符,查找字符在字符串中的下标,找不到就是-1
这是一个循环  健壮性判断  也就是当 还有 "fr"字符串的 时候  下面的 count++, 否则就是没有了查完了.

你主要不懂的是!=-1这个概念  还有你需要明白的是 ((index = str.indexOf(sub))!=-1)  的意思.
作者: 柳 德 彬    时间: 2013-4-5 22:04
把需求写出来嘛!
作者: 田光峰    时间: 2013-4-5 22:16
class StrigTest3
{
public static void main(String[] args)
{
int count =getCount("afrbcfrtyhgtfrbgfrd","fr");
   
System.out.println("count="+count);
}
    public static int getCount(String str,String sub)
    {
  int count=0;
  int index=0;
  while ((index = str.indexOf(sub))!=-1)//对于这个while语句的作用不是很明白,请高手指点
  {
          str = str.substring(index+sub.length(),str.length());
    count++;
  }
  return count;
    }
}

把代码(index = str.indexOf(sub))!=-1拿出来
(index = str.indexOf(sub))!=-1
index = str.indexOf(sub)
str.indexOf(sub)

其中str.indexOf(sub)是判断sub在str中是否存在 如果存在就返回大于或等于零的数,如果不存在就返回-1 给index
如果不是-1就进入循环
str = str.substring(index+sub.length(),str.length());是从找到的字符串向后截取并且再次付给str(因为下次循环还要比较)
count是记录字符串出现的次数。
作者: 刘吉庆    时间: 2013-4-5 22:26
String 的index(String str)方法的功能是:返回指定子字符串在此字符串中第一次出现处的索引;如果字符串参数作为一个子字符串在此对象中出现,则返回第一个这种子字符串的首字符的索引;如果它不作为一个子字符串出现,则返回 -1。
因此 (index = str.indexOf(sub))!=-1  就是循环查找sub在str中是否出现,直到查找不到。str根据返回的索引,通过str = str.substring(index+sub.length(),str.length());语句截取查找完sub后的剩余部分
作者: 李芳池    时间: 2013-4-5 22:46
while ((index = str.indexOf(sub))!=-1)
从str中查找sub字串,找到返回查找字符在字符串中的下标,找不到就返回-1;
就是说有“fr”字串时,进入循环,count++;找到最后没了就返回-1,循环就结束了
作者: 梁志兵    时间: 2013-4-5 22:48
lucy198921 发表于 2013-4-5 22:02
while ((index = str.indexOf(sub))!=-1)

指定字符,查找字符在字符串中的下标,找不到就是-1

((index = str.indexOf(sub))!=-1)  的意思.有点不明白?

作者: lucy198921    时间: 2013-4-5 22:53
梁志兵 发表于 2013-4-5 22:48
((index = str.indexOf(sub))!=-1)  的意思.有点不明白?

str.indexOf(sub)是判断sub在str中是否存在 如果存在就返回大于或等于零的数,如果不存在就返回-1 给index
如果不是-1就进入循环
str = str.substring(index+sub.length(),str.length());是从找到的字符串后截取并再次赋给str
作者: 梁志兵    时间: 2013-4-5 22:53
柳 德 彬 发表于 2013-4-5 22:04
把需求写出来嘛!

((index = str.indexOf(sub))!=-1)  的意思.有点不明白?

作者: HM何伟    时间: 2013-4-5 23:03
老师那样写确实不怎好看,这是我写的,应该比老师写的容易看些
public class StringTest {
        static int count = 0;

        public static void main(String[] args) {

                String s = "sdkkffkksfskkdfskkdfsdkk";
                String s1 = "kk";
                getZiString(s, s1);
                System.out.println(count);
        }

        public static int getZiString(String str1, String str2) {
                int index = 0;
                while ((index = str1.indexOf(str2)) != -1) {
                        str1 = str1.substring(index + str2.length(), str1.length());
                        count++;
                }
                return count;
        }
}
作者: 陈丽莉    时间: 2013-4-6 00:35
问题帮你改成【已解决】了~  回答的很详细了~  下回有不懂的方法,可以查API~
作者: 梁志兵    时间: 2013-4-6 20:00
陈丽莉 发表于 2013-4-6 00:35
问题帮你改成【已解决】了~  回答的很详细了~  下回有不懂的方法,可以查API~ ...

谢谢 那个不怎么会看:loveliness:
作者: 梁志兵    时间: 2013-4-6 20:04
HM何伟 发表于 2013-4-5 23:03
老师那样写确实不怎好看,这是我写的,应该比老师写的容易看些
public class StringTest {
        static int count ...

嗯 这样是好看点
作者: 梁志兵    时间: 2013-4-6 20:05
lucy198921 发表于 2013-4-5 22:53
str.indexOf(sub)是判断sub在str中是否存在 如果存在就返回大于或等于零的数,如果不存在就返回-1 给inde ...

谢谢 指教了




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