成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

java字符串替換如何實(shí)現(xiàn)

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

創(chuàng)新互聯(lián)專注于梁平企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站建設(shè),商城建設(shè)。梁平網(wǎng)站建設(shè)公司,為梁平等地區(qū)提供建站服務(wù)。全流程定制網(wǎng)站設(shè)計(jì),專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)

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

解題思路

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

    public static String replace(String str, String target, String replacement) {
        // 正常這里需要對(duì)str,target,replacement做輸入校驗(yàn),這里我省略, 比如str比target端的時(shí)候可以直接返回空字符串  
        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();
    }

    // 單純確認(rèn)從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;
    }

看吧,代碼其實(shí)沒啥難度,但咋就好多明顯刷過其他面試題的人都不會(huì)呢?。?!

Jdk中的replace實(shí)現(xiàn)

估計(jì)大多數(shù)人都沒看過Jdk中的實(shí)現(xiàn),所以順帶我們來欣賞下java String類中的replace方法是如何實(shí)現(xiàn)的。

    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);   // 先把未匹配字符添加進(jìn)去,然后直接添加replStr  
            i = j + tgtLen;
        } while (j < thisLen && (j = indexOf(tgtStr, j + tgtLen1)) > 0);  // 找到下一個(gè)匹配的下標(biāo) 
        return sb.append(this, i, thisLen).toString();
    }

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

關(guān)于“java字符串替換如何實(shí)現(xiàn)”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí),可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,小編每天都會(huì)為大家更新不同的知識(shí)點(diǎn)。

本文題目:java字符串替換如何實(shí)現(xiàn)
當(dāng)前網(wǎng)址:http://jinyejixie.com/article2/iiesoc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)、全網(wǎng)營(yíng)銷推廣做網(wǎng)站、網(wǎng)站設(shè)計(jì)網(wǎng)站策劃、小程序開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

綿陽(yáng)服務(wù)器托管
柘城县| 广昌县| 华坪县| 玉屏| 谢通门县| 八宿县| 原平市| 大竹县| 天祝| 兴化市| 西峡县| 道孚县| 永清县| 抚宁县| 鄂托克前旗| 贵定县| 五指山市| 垣曲县| 福海县| 五华县| 平邑县| 栖霞市| 浦江县| 桦川县| 旬阳县| 揭东县| 漠河县| 若羌县| 英德市| 九龙城区| 奎屯市| 根河市| 阿克| 灵宝市| 辛集市| 即墨市| 汽车| 南康市| 平远县| 黔东| 怀柔区|