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));
            }
        }
    }
}


結果:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章