Java中的字符串(二)——检查特定字符串出现的次数

Java字符串的第二弹,检查特定字符串出现的次数,为了方便说我先举个栗子~

例如,我要检测字符串“oo123o12123o321o123”中字符串“123”出现的次数

java的库中并没有直接针对此问题的函数,因此我们需要自己设计一个算法去实现。

 

首先要介绍一个java.lang.String中的方法:indexOf

 此方法共有四个重载,其格式及功能分别如下:

int indexOf(int ch)        检查并返回目标字符串中ch第一次出现的位置

int indexOf(String str)        检查并返回目标字符串中str第一次出现的位置

int indexOf(int ch , int fromIndex)        从索引(角标)fromIndex位置开始检测,返回ch第一次出现的位置

int indexOf(String str,int fromIndex)        从索引(角标)fromIndex位置开始检测,返回str第一次出现的位置

与其相对应的还有一个函数的四个重载

int lastIndexOf(int ch)        从后向前检查并返回目标字符串中ch第一次出现的位置

int lastIndexOf(String str)        从后向前检查并返回目标字符串中str第一次出现的位置

int lastIndexOf(int ch , int fromIndex)        从后向前从索引(角标)fromIndex位置开始检测,返回ch第一次出现的位置

int lastIndexOf(String str,int fromIndex)        从后向前从索引(角标)fromIndex位置开始检测,返回str第一次出现的位置

值得注意的是参数中对字符ch的类型规定是int型,这是因为java中存在自动类型转化,会对char的数据自动类型转化为int型,所以此处并不矛盾。

这样我们就可以设计自己的算法了,indexOf这个函数只能获取字符串中第一次出现的下角标,所以我们可以利用循环多次使用indexOf,直到字符串结束,这里类似数组的遍历。 当字符串中不存在要检查的字符串或者字符串已到末尾时indexO返回f-1。

代码如下:

public static void main(String[] args) {
		
		String str = "oo123o12123o321o123";
		String key = "123";
		int count = 0;//累加器
		int index = 0;//检索下角标,初始值为0
		
		
		while( (index = str.indexOf(key,index)) != -1)//只要字符串不结束,indexOf返回最近出现key的下角标
		{
			count ++;//每出现一次,累加器累加
			index += key.length();//新一轮的检索从index向后的key的长度的位置开始
		}
		
		System.out.println(count);
		
	}

输出结果为:3

 

======================================================================================

如果大家有更好的方法欢迎一起交流哦QAQ我只是只萌新而已

你可能感兴趣的:(Java)