亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java字符串替換如何實現

發布時間:2022-01-15 17:42:10 來源:億速云 閱讀:153 作者:iii 欄目:大數據

這篇文章主要介紹“java字符串替換如何實現”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“java字符串替換如何實現”文章能幫助大家解決問題。

字符串處理在程序猿日常工作工作中非常常見,常見到幾乎各種語言中都已經封裝好了字符串相關的API,我們只需要直接拿過來用就好。就拿Java為例,jdk中的String()類幾乎封裝了所有字符串相關的操作,其方法數量有近百個,幾乎滿足了程序猿所有字符串相關的操作。
java字符串替換如何實現 正是因為這么方便,估計大多數Java程序猿都沒自己實現過字符串的replace。這里正式引入一下今天的精選面試題:不依賴第三方庫 實現一個字符串替換replace(String str, String target, String replacement)函數,其功能是將str中所有的target替換為replacement。 其實這道題并不涉及任何復雜或者高深的算法,只需要掌握基本的編程就可以做,但當我某次把這道題拿出來面試某個應屆生時,他代碼寫的磕磕絆絆的,后來我也陸陸續續用這題考過好幾個人,鮮有順暢寫出來的,是我低估了這道題的難度??

解題思路

回到題目本身,我多說兩句,仔細想想這道題其實也很簡單,然而這就難倒了一大批人,大家刷面試題前還是要先打好編程基礎。 這題的解題思路也很簡單,我們新建個StringBuilder,只需要把str中不是target的部分加進去,如果是遇到target,就把replacement字符串加進去,真的沒有任何復雜的算法 就是單純考你編程的基本功,代碼如下。

    public static String replace(String str, String target, String replacement) {
        // 正常這里需要對str,target,replacement做輸入校驗,這里我省略, 比如str比target端的時候可以直接返回空字符串  
        StringBuilder res = new StringBuilder();
        for (int i = 0; i < str.length(); ) {
            if (isMatch(str, i, target)) {
                i += target.length();  // 如果匹配,需要直接向前跳target.length  
                res.append(replacement);
                continue;
            }
            res.append(str.charAt(i++));
        }
        return res.toString();
    }

    // 單純確認從str的pos位置開始,是否和target相匹配  
    private static boolean isMatch(String str, int pos, String target) {
        for (int i = 0; i < target.length() && i + pos < str.length(); i++) {
            if (str.charAt(i + pos) != target.charAt(i)) {
                return false;
            }
        }
        return true;
    }

看吧,代碼其實沒啥難度,但咋就好多明顯刷過其他面試題的人都不會呢!!!

Jdk中的replace實現

估計大多數人都沒看過Jdk中的實現,所以順帶我們來欣賞下java String類中的replace方法是如何實現的。

    public String replace(CharSequence target, CharSequence replacement) {
        String tgtStr = target.toString();
        String replStr = replacement.toString();
        int j = indexOf(tgtStr);
        if (j < 0) {
            return this;
        }
        int tgtLen = tgtStr.length();
        int tgtLen1 = Math.max(tgtLen, 1);
        int thisLen = length();

        int newLenHint = thisLen - tgtLen + replStr.length();
        if (newLenHint < 0) {
            throw new OutOfMemoryError();
        }
        StringBuilder sb = new StringBuilder(newLenHint);
        int i = 0;
        do {
            sb.append(this, i, j).append(replStr);   // 先把未匹配字符添加進去,然后直接添加replStr  
            i = j + tgtLen;
        } while (j < thisLen && (j = indexOf(tgtStr, j + tgtLen1)) > 0);  // 找到下一個匹配的下標 
        return sb.append(this, i, thisLen).toString();
    }

jdk中的思路和我們上面寫的思路是一致的,但jdk的代碼更為精簡,其實jdk也沒用啥高深的東西,只是在indexOf()中考慮了更多數據編碼的問題。

關于“java字符串替換如何實現”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

泾阳县| 丽水市| 咸丰县| 湾仔区| 勐海县| 莲花县| 巴彦淖尔市| 同仁县| 辽源市| 乐至县| 斗六市| 安阳县| 正宁县| 原平市| 利辛县| 华容县| 汝城县| 深圳市| 沅江市| 威远县| 平乐县| 石泉县| 旺苍县| 汉中市| 淳化县| 新邵县| 永丰县| 庄河市| 仙居县| 嵊州市| 方正县| 沾化县| 永定县| 阿拉善右旗| 龙井市| 常德市| 阳高县| 平昌县| 安远县| 安阳市| 吐鲁番市|