獲取一個字符串在另一個字符串中出現的次數


  • 思路:比較數組和被比較數組各設立一個循環,比較數組作為內循環,用比較數組的首字符進行判斷,true:開始遍歷判斷兩字符串的對應位,false:外層循環遞進,開始下一次判斷
  • 注意點:
    • 單個字符和多個字符情況;
    • 相同的匹配字符重匹配情況;如"11"匹配數組內容"111111",正確應該只有三次

獲取一個字符串在另一個字符串中出現的次數。 比如:獲取“ ab”在 “abkkcadkabkebfkabkskab” 中出現的次數

    public int getCount(String mianStr,Strin subStr){
    
        String str1 = "aa";
        String str2 = "aabjkdaaaaafjksdabkjdfsdabj";
        //將字符串轉換成字符數組
        char[] ch1 = str1.toCharArray();
        char[] ch2 = str2.toCharArray();

        int len1 = str1.length();
        int len2 = str2.length();
        int count = 0;//記錄出現次數
        boolean loopFlag = true;//設置一個標識,用於判斷是否找到匹配字符的開關
        for(int i = 0;i < len2;i++){
            //用比較數組的首元素進行匹配,一旦匹配到相同的字符,開始后繼的檢測
            if(ch1[0] == ch2[i]){
                for(int j = 0,k = i;j < len1;j++,k++){
                    if(ch1[j] == ch2[k]){
                        //比較完最后一個字符元素且相同,計次器+1
                        if(j == len1-1){
                            count++;
                            i += len1 -1;//用於跳過已在匹配的子字符串范圍內的長度,-1是為了抵消循環的遞增
                            loopFlag = false;
                        }
                    }
                    else
                        break;//一旦發現對應位數不相等,退出檢測
                }
            }
        }
        if(loopFlag){
            System.out.println("沒有匹配的字符串!");
        }
        else {
            System.out.println("匹配的字符串出現次數有:"+count+"次");
        }
    }

調用String方法的方式

    public int getCount(String mainStr,String subStr){
        int mainLength = mainStr.length();
        int subLength = subStr.length();
        int count = 0;//記錄出現次數
        int index = 0;
        if(mainLength >= subLength){
//            方式一:
//            while((index = mianStr.indexOf(subStr)) != -1 ) {//獲取字符串subStr首次出現在mainStr的腳標
//                count++;
//                mianStr = mianStr.substring(index + subLength);//獲取未比較的部分,賦值給被比較數組
//            }
//            方式二:改進效率
            while((index = mainStr.indexOf(subStr,index)) != -1 ){
                count++;
                index += subLength;
            }
            return count;
        }
        return 0;
    }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM