字符串:“I love Java I love Python I love Internet”
要求:找出字符串里所有的love及其出现位置

思路1: 首先,要得到字符串中某个元素的位置,通常使用String的indexOf方法,并且因为这个字符串中可能存在多个这样的元素(多次、重复的操作使用循环或者递归等方法)所以要利用循环操作。但是这个indexOf方法只能找到第一个匹配的元素位置,那如果这个字符串后面还有这个元素呢?,但我们要紧紧抓住这个方法的局限性,正因为它只能找到第一个匹配的元素位置,那只要后面我们每一次循环操作时,都让我们匹配的元素是第一个不就行了,所以每一次匹配到这个元素后,就将这个元素及其前面的部分删除即使用String的subString方法拆分,然后再寻找下一个的位置,直到找完

思路2: 直接利用split方法拆分得到所有的单词形成一个字符串数组,即将空格作为拆分条件,然后遍历这个数组,只要数组的元素和"love"相等就记录这个元素的位置(这个元素的位置就等于前面的字符串元素长度加上空格的个数再加1)
 

package net.dc.lesson20.exercise;

public class GetStrPosition {
    public static void main(String[] args) {
        String str = "I love Java I love Python I love Internet";
        //第一种方法

        int frontLength = 0;//定义该变量用于记录匹配"love"的元素前面的长度

        while(str.contains("love")){//只要该str字符串中有匹配"love"的元素,才进行以下操作

            int index = str.indexOf("love");//定义该变量用于记录匹配"love"的元素在当前字符串的位置
            //匹配"love"的元素位置等于frontLength加上index;加1为了从1开始计数,更加直观:
            System.out.println(String.format("str[%d] = love", index + frontLength + 1));
            frontLength += (index + 4);

            str = str.substring(index + 4);//将字符串中匹配"love"元素的前面部分及其本身截取,留下后面的部分
        }
        System.out.println();



        //第二种方法

        String str_2 = "I love Java I love Python I love Internet";
        String[] strArr = str_2.split(" ");
        for (int i = 0; i < strArr.length; i++) {
            if(strArr[i].equals("love")){
                int frontLength_2 = 0;//定义该变量用于记录匹配"love"的元素前面的长度

                for(int j = 0; j < i; j++){
                    frontLength_2 += strArr[j].length();
                }//该循环是为了加上前面数组元素的长度
                frontLength_2 += i;//加上前面空格的个数

                //加1是因为,在数组中匹配该"love"元素的位置,并不仅仅只是前面所有元素的长度加上空格个数,还得算上该元素本身出现的位置
                System.out.println(String.format("str[%d] = love", frontLength_2 + 1));
            }
        }
    }
}


结果 

 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐