Java得到字符串里某个元素的所有出现位置

字符串:“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));
            }
        }
    }
}


结果:
在这里插入图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值