练习题:
String str = "我是中国人, 中国的首都是北京,中国有长江黄河,中国最高的山峰是珠穆朗玛峰,拉萨是中国最高的城市。";
String s = "中国";
求str中s出现的次数
解题思路:
思路一:第一次查找s下标位置后,下次循环从当前下标开始向后查询,反复相加直到查询没有s结束循环。
思路二:每次查询到s后截取str并保存到一个新的str1字符串中,反复查询并截取直到str1中没有s结束循环,统计次数。(这种因为每次都要创建一个新的str1,需要占用内存空间降低性能,虽然也可以最终求得结果,但是个人觉得性价比不高。)
代码:
写法一:
public static void main(String[] args) {
String str = "我是中国人, 中国的首都是北京,中国有长江黄河,中国最高的山峰是珠穆朗玛峰,拉萨是中国最高的城市。";
String s = "中国";
int index = str.indexOf(s);//索引值,从0开始
int count = 0;//统计目标字符串的个数,累计相加
while (index != -1){//0不等于-1,开始执行
count++; //统计次数+1
index += s.length();//查找到后加上s的长度,用于 计算新的查找起始位置
index = str.indexOf(s, index);//查找下一个目标字符串的位置
}
System.out.println("count = " + count);//5
}
简化后:
public static void main(String[] args) {
String str = "我是中国人, 中国的首都是北京,中国有长江黄河,中国最高的山峰是珠穆朗玛峰,拉萨是中国最高的城市。";
String s = "中国";
int index = -1;
int count = 0;//统计目标字符串的个数
while ((index = str.indexOf(s, index)) != -1) {
count++; //统计次数+1
index += s.length();//查找到后加上s的长度,用于 计算新的查找起始位置
}
System.out.println("count = " + count);
}
键盘输入:
import java.util.Scanner;
public class Test01 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入一句话:");
String string = input.next();
System.out.println("请输入想要查找的字符:");
String s = input.next();
int count = 0;
//lastIndexOf(String str):返回指定字符出现的最后一次的下标
for (int i = 0; i <= string.lastIndexOf(s); i++) {
/*
String substring(int star, int end):
从start开始,到end结束截取字符串。
包括start,不包括end
*/
if (s.equals(string.substring(i,i+s.length()))){
System.out.print(i+"\t");
i = i+s.length()-1;
count++;
}
}
System.out.println(s + " 共出现" + count + "次!");
input.close();
//JAVA的文件输入输出中的input.close()和output.close()作用?
//把文件对象关闭,虽然JAVA虚拟机的回收机制会自动关闭。但是就逻辑上来说,一个程序员有必要呼叫这两个方法来达到程序优化的目的.
}
}