最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java刪除String中指定字符的11種方法匯總

 更新時間:2023年11月08日 16:14:03   作者:毛奇志  
這篇文章主要給大家介紹了關(guān)于Java刪除String中指定字符的11種方法,在Java中String類提供了許多方法來處理字符串,其中包括刪除指定字符的方法,文中通過代碼介紹的非常詳細,需要的朋友可以參考下

方法一

第一種方法 – 通過循環(huán)從前往后遍歷,如果不是要刪除的字符則加到處理后的字符串中,代碼如下:

public String deleteCharString0(String sourceString, char chElemData) {
    String resultString = "";
    for (int i = 0; i < sourceString.length(); i++) {
        if (sourceString.charAt(i) != chElemData) {
            resultString += sourceString.charAt(i);
        }
    }
    return resultString;
}

金手指小結(jié):sourceString.charAt(i) 遍歷查找,resultString做 += 拼接操作,一共拼接sourceString.length-1次,sourceString.charAt()來拼接。

優(yōu)點:只是使用 string.charAt() 遍歷;

缺點:對string做 += 拼接操作,因為string是final修飾的不可變對象,所以要做n次字符串拼接,效率很低。

方法二

第二種方法 — 通過循環(huán)確定要刪除字符的位置索引,然后通過分割字符串的形式,將子字符串拼接,注意最后一段子字符串和源字符串中沒有要刪除字符的情況,代碼如下:

    public String deleteCharString1(String sourceString, char chElemData) {
        String resultString = "";
        int iIndex = 0;
        for (int i = 0; i < sourceString.length(); i++) {
            if (sourceString.charAt(i) == chElemData) {
                if (i > 0) {
                    resultString += sourceString.substring(iIndex, i);   // string類型 += ,這是字符串拼接操作
                }
                iIndex = i + 1;
            }
        }
        if (iIndex <= sourceString.length()) {
            resultString += sourceString.substring(iIndex, sourceString.length());
        }
        return resultString;
    }

金手指小結(jié):sourceString.charAt(i) 遍歷查找,resultString做 += 拼接操作,拼接次數(shù)較方法1少,sourceString.substring來拼接。

方法三

第三種方法 — 原理同上,只不過查找要刪除字符位置采用String類中的函數(shù)執(zhí)行,效率不如上面的高,代碼如下:

    public String deleteCharString2(String sourceString, char chElemData) {
        String resultString = "";
        int iIndex = 0;
        int tmpCount = 0;
        do {
            tmpCount = sourceString.indexOf(chElemData, iIndex);   // indexof定位到要刪除的元素,
            // 然后使用substring拼接,因為要刪除的元素chElement可能在sourceString字符串中存在多個,所以要使用dowhile循環(huán)
            if (tmpCount > 0) {
                resultString += sourceString.substring(iIndex, tmpCount);
            }
            if (tmpCount != -1) {
                iIndex = tmpCount + 1;
            }
        } while (tmpCount != -1);
        if (iIndex <= sourceString.length()) {
            resultString += sourceString.substring(iIndex, sourceString.length());
        }
        return resultString;
    }

金手指小結(jié):indexof定位到要刪除的元素,然后使用substring拼接,因為要刪除的元素chElement可能在sourceString字符串中存在多個,所以要使用do…while循環(huán)。

方法四

第四種方法 — 原理與上方基本一致,只不過這次采用倒序方式,這里的坑就更多了,一定要注意索引的取值范圍和是否合法,代碼如下:

public String deleteCharString3(String sourceString, char chElemData) {
    String deleteString = "";
    int iIndex = sourceString.length();
    int tmpCount = 0;
    do {
        tmpCount = sourceString.lastIndexOf(chElemData, iIndex - 1);
        if (tmpCount < sourceString.length() && tmpCount >= 0) {
            deleteString = sourceString.substring(tmpCount + 1, iIndex) + deleteString;
        }
        if (tmpCount != -1) {
            iIndex = tmpCount;
        }
    } while (tmpCount != -1);
    if (iIndex >= 0) {
        deleteString = sourceString.substring(0, iIndex) + deleteString;
    }

    return deleteString;
}

金手指小結(jié):lastIndexOf定位到要刪除的元素,然后使用substring拼接,因為要刪除的元素chElement可能在sourceString字符串中存在多個,所以要使用dowhile循環(huán)。

方法五

第五種方法 — 通過采用正則的方式和replaceAll函數(shù),本種方法要注意特殊字符,例如正則中的 “.”字符,需要對特殊字符進行轉(zhuǎn)義,代碼如下:

public String deleteCharString4(String sourceString, char chElemData) {
    String deleteString = "";
    final String strTable = "|^$*+?.(){}\\";
    String tmpRegex = "["; 
    for (int i = 0; i < strTable.length(); i++) {
        if (strTable.charAt(i) == chElemData) {
            tmpRegex += "\\";
            break;
        }
    }
    tmpRegex += chElemData + "]";
    deleteString = sourceString.replaceAll(tmpRegex, "");
    return deleteString;
}

方法六

第六種方法 — 采用正則的方式將字符串分割成幾個子字符串,再將子字符串進行拼接,代碼如下:

public String deleteCharString5(String sourceString, char chElemData) {
    String deleteString = "";
    final String strTable = "|^$*+?.(){}\\";
    String tmpRegex = "["; 
    for (int i = 0; i < strTable.length(); i++) {
        if (strTable.charAt(i) == chElemData) {
            tmpRegex += "\\";
            break;
        }
    }
    tmpRegex += chElemData + "]";
    String[] tmpStringArray = sourceString.split(tmpRegex);
    for (int i = 0; i < tmpStringArray.length; i++) {
        deleteString += tmpStringArray[i];
    }
    return deleteString;
}

金手指小結(jié):

第一,返回結(jié)果還是String,所以還是要拼接得到結(jié)果;

第二,遍歷查找過程,因為sourceString變成char數(shù)組,使用==比較,循環(huán)sourceString.length次。

方法七

第七種方法 — 將字符編程可讀序列,在通過 String 類中的方法替換,代碼如下:

public String deleteCharString6(String sourceString, char chElemData) {
    String tmpString = "";
    tmpString += chElemData;
    tmpString.subSequence(0, 0);
    String deleteString = "";
    deleteString = sourceString.replace(tmpString, deleteString.subSequence(0, 0));
    return deleteString;
}

方法八

第八種方法 — 把原字符串轉(zhuǎn)化為字符數(shù)組,然后原理與直接插入排序原理類似,代碼如下:

public String deleteCharString7(String sourceString, char chElemData) {
    String deleteString = "";
    char[] Bytes = sourceString.toCharArray();   // sourceString變?yōu)閏har[]數(shù)組
    int iSize = Bytes.length;    // 記錄大小size
    for (int i = Bytes.length - 1; i >= 0; i--) {
        if (Bytes[i] == chElemData) {
            for (int j = i; j < iSize - 1; j++) {
                Bytes[j] = Bytes[j + 1];
            }
            iSize--;
        }
    }
    for (int i = 0; i < iSize; i++) {
        deleteString += Bytes[i];     // 還是拼接
    }
    return deleteString;
}

金手指小結(jié):

第一,返回結(jié)果還是String,所以還是要拼接得到結(jié)果;

第二,遍歷查找過程,因為sourceString變成char數(shù)組,使用==比較,循環(huán)sourceString.length次。

方法九

第九種方法 — 原理與 第一種方法 類似,本次采用 stringBuffer 類中的 append 方法進行操作,但是效率應(yīng)該高于第一種。

public String deleteCharString8(String sourceString, char chElemData) {
    StringBuffer stringBuffer = new StringBuffer("");
    for (int i = 0; i < sourceString.length(); i++) {
        if (sourceString.charAt(i) != chElemData) {
            stringBuffer.append(sourceString.charAt(i));
        }
    }
    return stringBuffer.toString();
}

金手指小結(jié):

第一,初始字符串就是返回結(jié)果,之前都是return string對象,所以需要字符串拼接,現(xiàn)在return stringbuffer,最后stringbuffer.toString;

第二,遍歷查找過程,因為sourceString是String,只能使用charAt(i),循環(huán)sourceString.length次;

第三,得到返回結(jié)果的操作,找到要刪除的,使用stringbuffer代替string操作,使用stringbuffer的append(),保證刪除操作不會因為字符串拼接而底層生成新字符串。

優(yōu)點:在第一步,返回結(jié)果變成了stringbuffer,因為第一步,所以第三步stringbuffer.append代替了字符串拼接;

缺陷:第二點,因為sourceString是String,只能使用charAt(i),仍然循環(huán)sourceString.length次。

方法十

第十種方法 — 采用 stringBuffer 類中的 replace and indexOf 方法(_ 故意湊方法),代碼如下:

public String deleteCharString9(String sourceString, char chElemData) {
    String tmpString = "";
    tmpString += chElemData;
    StringBuffer stringBuffer = new StringBuffer(sourceString);
    int iFlag = -1;
    do {
        iFlag = stringBuffer.indexOf(tmpString);
        if (iFlag != -1) {
            stringBuffer = stringBuffer.replace(iFlag, iFlag + 1, "");
        }
    } while (iFlag != -1);
    return stringBuffer.toString();
}

金手指小結(jié):

第一,初始字符串就是返回結(jié)果,之前都是return string對象,所以需要字符串拼接,現(xiàn)在return stringbuffer,最后stringbuffer.toString;

第二,遍歷查找過程,先用sourceString初始化stringbuffer,stringbuffer保證線程安全,使用indexof代替無腦charAt(),減少循環(huán)次數(shù);

第三,得到返回結(jié)果的操作,找到要刪除的,使用stringbuffer代替string操作,使用stringbuffer的replace()將指定位置char變?yōu)榭兆址WC刪除操作不會因為字符串拼接而底層生成新字符串。

方法十一

第十一種方法 — 采用 stringBuffer 類中的 deleteCharAt 和 indexOf 直接刪除

public String deleteCharString10(String sourceString, char chElemData) {
    String tmpString = "";
    tmpString += chElemData;
    StringBuffer stringBuffer = new StringBuffer(sourceString);
    int iFlag = -1;
    do {
        iFlag = stringBuffer.indexOf(tmpString);
        if (iFlag != -1) {
            stringBuffer.deleteCharAt(iFlag);
        }
    } while (iFlag != -1);
    return stringBuffer.toString();
}

金手指小結(jié):

第一,之前都是return string對象,所以需要字符串拼接,現(xiàn)在return stringbuffer,最后stringbuffer.toString;

第二,先用sourceString初始化stringbuffer,stringbuffer保證線程安全,使用indexof代替無腦charAt(),減少循環(huán)次數(shù);

第三,找到要刪除的,使用stringbuffer代替string操作,使用stringbuffer的deleteCharAt()保證刪除操作不會因為字符串拼接而底層生成新字符串。

尾聲

效率最高的是方法十和方法十一, 都滿足參數(shù)為sourceString和deleteChar,返回值為resultString?;仡櫼幌拢?/p>

方法十:

第一,初始字符串就是返回結(jié)果,之前都是return string對象,所以需要字符串拼接,現(xiàn)在return stringbuffer,最后stringbuffer.toString;

第二,遍歷查找過程,先用sourceString初始化stringbuffer,stringbuffer保證線程安全,使用indexof代替無腦charAt(),減少循環(huán)次數(shù);

第三,得到返回結(jié)果的操作,找到要刪除的,使用stringbuffer代替string操作,使用stringbuffer的replace()將指定位置char變?yōu)榭兆址?,保證刪除操作不會因為字符串拼接而底層生成新字符串。

方法十一:

第一,之前都是return string對象,所以需要字符串拼接,現(xiàn)在return stringbuffer,最后stringbuffer.toString;

第二,先用sourceString初始化stringbuffer,stringbuffer保證線程安全,使用indexof代替無腦charAt(),減少循環(huán)次數(shù);

第三,找到要刪除的,使用stringbuffer代替string操作,使用stringbuffer的deleteCharAt()保證刪除操作不會因為字符串拼接而底層生成新字符串。

到此這篇關(guān)于Java刪除String中指定字符的11種方法匯總的文章就介紹到這了,更多相關(guān)Java刪除String指定字符內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 一文帶你快速學(xué)會JDBC及獲取連接的五種方式

    一文帶你快速學(xué)會JDBC及獲取連接的五種方式

    JDBC(Java Database Connectivity)是一個獨立于特定數(shù)據(jù)庫管理系統(tǒng)、通用的SQL數(shù)據(jù)庫存取和操作的公共接口,下面這篇文章主要給大家介紹了關(guān)于如何通過一文帶你快速學(xué)會JDBC及獲取連接的五種方式,需要的朋友可以參考下
    2022-09-09
  • Java設(shè)計模式之java備忘錄模式詳解

    Java設(shè)計模式之java備忘錄模式詳解

    這篇文章主要介紹了JAVA設(shè)計模式之備忘錄模式,簡單說明了備忘錄模式的概念、原理并結(jié)合實例形式分析了java備忘錄模式的具體定義及使用方法,需要的朋友可以參考下
    2021-09-09
  • springboot接收J(rèn)SON實現(xiàn)示例解析

    springboot接收J(rèn)SON實現(xiàn)示例解析

    這篇文章主要為大家介紹了springboot如何接收J(rèn)SON的實現(xiàn)示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-07-07
  • Java?EasyExcel創(chuàng)建復(fù)雜表格的完整指南

    Java?EasyExcel創(chuàng)建復(fù)雜表格的完整指南

    WriteTable?是?EasyExcel?庫中的一個核心組件,用于在同一個?Excel?表單(Sheet)內(nèi)創(chuàng)建多個獨立的表格區(qū)域,下面我們來看看如何使用WriteTable創(chuàng)建復(fù)雜表格吧
    2025-12-12
  • Java數(shù)組歸納總結(jié)

    Java數(shù)組歸納總結(jié)

    這篇文章主要介紹了Java數(shù)組歸納總結(jié),總結(jié)內(nèi)容有一維數(shù)組、二維數(shù)組、遍歷數(shù)組、替換元素、數(shù)組排序、數(shù)組拷貝、元素查詢、排序算法,下面來看看這些方法的相關(guān)資料,需要的小伙伴可以辛苦一下
    2022-01-01
  • Spring Security內(nèi)存中認(rèn)證的實現(xiàn)

    Spring Security內(nèi)存中認(rèn)證的實現(xiàn)

    本文主要介紹了Spring Security內(nèi)存中認(rèn)證的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-11-11
  • SpringMVC?@RequestMapping注解屬性詳細介紹

    SpringMVC?@RequestMapping注解屬性詳細介紹

    通過@RequestMapping注解可以定義不同的處理器映射規(guī)則,下面這篇文章主要給大家介紹了關(guān)于SpringMVC中@RequestMapping注解用法的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-02-02
  • Java API如何實現(xiàn)向Hive批量導(dǎo)入數(shù)據(jù)

    Java API如何實現(xiàn)向Hive批量導(dǎo)入數(shù)據(jù)

    這篇文章主要介紹了Java API如何實現(xiàn)向Hive批量導(dǎo)入數(shù)據(jù)的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • SpringBoot實現(xiàn)隱式參數(shù)注入的完整指南

    SpringBoot實現(xiàn)隱式參數(shù)注入的完整指南

    這篇文章主要為大家詳細介紹了SpringBoot實現(xiàn)隱式參數(shù)注入的相關(guān)方法,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-11-11
  • Java8中Function函數(shù)式接口用法及說明

    Java8中Function函數(shù)式接口用法及說明

    文章詳細介紹了Java中的函數(shù)式接口,解釋了什么是函數(shù)式接口以及如何使用@FunctionalInterface注解進行定義,同時,文章還列舉了常用的內(nèi)置函數(shù)式接口,如Function、Consumer、Predicate、Supplier等,并對它們的方法進行了說明
    2026-04-04

最新評論

长治县| 江安县| 云龙县| 沭阳县| 顺平县| 郯城县| 莱西市| 永吉县| 电白县| 陆川县| 博野县| 乌苏市| 平江县| 阳泉市| 汕尾市| 洪泽县| 潼关县| 兴文县| 黄浦区| 五台县| 黔江区| 赣榆县| 万年县| 晋宁县| 扬中市| 崇文区| 武汉市| 武城县| 万山特区| 信丰县| 巴中市| 丽水市| 保亭| 科技| 儋州市| 墨脱县| 嘉定区| 栖霞市| 三河市| 长海县| 瓦房店市|