黑马程序员技术交流社区

标题: 获取一个字符串中指定子串出现的次数 [打印本页]

作者: -律-    时间: 2014-12-14 03:32
标题: 获取一个字符串中指定子串出现的次数
在API中翻了半天木有找到这个方法,度娘上也只有从字符串中查找指定字符出现次数的案例而已.
        另外能问下像类似于这种问题,应该怎么去API查方法么

作者: Eagle    时间: 2014-12-14 03:43
boolean contains(CharSequence s)
          当且仅当此字符串包含指定的 char 值序列时,返回 true。
String类里的。
CharSequence 是个接口,你点进去看看,可以知道String类实现了它。所以可以直接传字符串进去。
查API,你就要看你需要操作的是什么东西,像这个,操作的是字符串,就要找字符串滴类。
然后就可以查找看看,有没有你需要的方法。没有方法,你可以再看看父类,或者之类。接口之类的。
实在没有,毕老师说的,那你就自己写一个嘛。呵呵。

作者: -律-    时间: 2014-12-14 03:58
Eagle 发表于 2014-12-14 03:43
boolean contains(CharSequence s)
          当且仅当此字符串包含指定的 char 值序列时,返回 true。
S ...

这位兄弟,你说的很有道理,可是我还是不太明白,打比方说一个字符串ndfnbaohgaenbanjfjnbadkn然后从里面找出nba出现过几次,我上度娘找到个counter();

        可是这个counter只能查找然后返回单个字符出现的次数
作者: 曛丨黯淡浮华    时间: 2014-12-14 04:02
本帖最后由 曛丨黯淡浮华 于 2014-12-14 04:08 编辑

首先,你要明白你的需求是什么 ~
然后从关键部分分析, ——  就好比字符串出现次数,
我会先从字符串分析,查阅API文档,看看String类提供了什么可以使用的方法,
然后,我找到了其中几个方法都是可以实现这个功能的,
你就任选其中一个, 就是这么解决问题的, (PS: 表示我就是这样解决问题的,
然后给你2个小程序, 参考参考 ——
  1. public class TestDemo
  2. {
  3.         public static int method1(String str, String key)
  4.         {
  5.                 int count = 0;
  6.                 for(int i = 0; i<str.length(); i++)
  7.                 {
  8.                         if((""+str.charAt(i)).contains(key))
  9.                                 count++;
  10.                 }
  11.                 return count==0?-1:count;
  12.         }

  13.         public static int method2(String str,char key)
  14.         {
  15.                 int count = 0;
  16.                 for(int i = 0; i<str.length(); i++)
  17.                 {
  18.                         if(str.charAt(i)==key)
  19.                                 count++;
  20.                 }
  21.                 return count==0?-1:count;
  22.         }

  23.         public static void main(String[] args) {
  24.                
  25.                 String str = "abcdefgssaaaa";
  26.                 System.out.println(method1(str, "a"));
  27.                 System.out.println(method2(str, 's'));
  28.         }
  29. }
复制代码





作者: -律-    时间: 2014-12-14 04:27
曛丨黯淡浮华 发表于 2014-12-14 04:02
首先,你要明白你的需求是什么 ~
然后从关键部分分析, ——  就好比字符串出现次数,
我会先从字符串分析 ...

你说的很有道理,亲,可是你这方法还是只能找一个字符并返回次数,而不能找给定子字符串啊,比如说 "abcdefgssaaaa";我想知道这个字符串中ss出现过几次并打印,结果返回-1,我哭了
作者: 曛丨黯淡浮华    时间: 2014-12-14 06:05
你刚不是说字符吗 ~

所以我给你写的是单个字符的噢 ~   好吧,我给你写个字符串的——

  1. public class TestDemo
  2. {
  3.         public static int method(String str, String key)
  4.         {
  5.                 int count = 0, index = 0;

  6.                 while(str.indexOf(key)!=-1)
  7.                 {
  8.                         str = str.substring(index+key.length());
  9.                         count++;
  10.                         index = str.indexOf(key);
  11.                 }
  12.                 return count==0?-1:count;
  13.         }

  14.         public static void main(String[] args) {
  15.                
  16.                 String str = "absssssabssssab";

  17.                 System.out.println(method(str, "ab"));
  18.         }
  19. }
复制代码

作者: Eagle    时间: 2014-12-14 11:31
-律- 发表于 2014-12-14 04:27
你说的很有道理,亲,可是你这方法还是只能找一个字符并返回次数,而不能找给定子字符串啊,比如说 "abcdefgs ...

查找方法先确定几点:
1、        这个功能有结果吗?结果是什么类型?确定返回值类型。
2、        需要传递参数进去吗?
3、        如果有参数,是什么类型的呢? 有几个?确定参数列表
如果思考错误,按照这个方法找没有找到。
那么可以去父类查找,如果父类也没有,那么。
就应该重新思考,是不是考虑错了。

出现的次数,可以用这个:
int indexOf(int ch, int fromIndex)
          返回在此字符串中第一次出现指定字符处的索引,从指定的索引开始搜索。
这个楼主应该能理解了吧??
  1. String str = "abcccf";
  2. int a,x = 0;
  3. while(x!=-1){
  4.     x = str.indexOf('c',x);
  5.    a++;
  6. }
复制代码



作者: 迷失的小Z    时间: 2014-12-14 15:49
字符串用split(子串)切割,如果startwith返回为true ,endwith返回为true  则有length+1 个 如果startwith和endwith都为false则出现length-1个 如果有一个返回为true则为length个……




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