在开发过程中我们经常会用到String的indexOf方法,这个方法是用来获取某个特定字符在指定字符串中第一次出现的位置,通常用来判断是否包含或者用来进行字符串的截取,有些时候我们不仅需要获取这个特定字符第一次出现的位置,可能还需要获取第二次、第三次甚至是第四次出现的位置。
怎么做呢?
public static void main(String[] args) {
//指定字符串
String str = "welcome to china";
//查找字符 o 出现的所有位置
Pattern pattern = Pattern.compile("o");
Matcher findMatcher = pattern.matcher(str);
while(findMatcher.find()) {
System.out.println(findMatcher.start());
}
}
运行看下结果:
可以看下,结果是没有问题的。
封装一下就可以使用了(方法的第二个参数是需要定位的字符或者字符串,如果是字符,传入的时候使用String.valueOf()方法转为String类型):
/**
* @param data 指定字符串
* @param str 需要定位的特殊字符或者字符串
* @param num 第n次出现
* @return 第n次出现的位置索引
*/
public static int getIndexOf(String data,String str,int num){
Pattern pattern = Pattern.compile(str);
Matcher findMatcher = pattern.matcher(data);
//标记遍历字符串的位置
int indexNum=0;
while(findMatcher.find()) {
indexNum++;
if(indexNum==num){
break;
}
}
System.out.println("字符或者字符串"+str+"第"+num+"次出现的位置为:"+findMatcher.start());
return findMatcher.start();
}
调用:
public static void main(String[] args) {
//指定字符串
String str = "welcome to china";
//需要定位的可以是字符也可以是字符串,本示例是用的字符'o',需使用String.valueOf()方法转为字符串
getIndexOf(str, String.valueOf('o'), 1);
}
试看结果:
查询o第一次出现的位置:
查询o第二次出现的位置:
复制我写的封装方法,放到项目的共通里面就可以随处调用了,我是在main方法中测试的,你用到的时候可能需要把方法的static关键字去掉。