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

Java實(shí)現(xiàn)將字符串中的星號(hào)*替換為0-9中的數(shù)字

 更新時(shí)間:2025年07月24日 09:27:11   作者:@趙士杰  
這篇文章主要為大家詳細(xì)介紹了Java如何實(shí)現(xiàn)將字符串中的星號(hào)*替換為0-9中的數(shù)字,并返回所有可能的替換結(jié)果,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

需求

將輸入的字符串中的星號(hào)替換為0-9中的數(shù)字,并返回所有可能的替換結(jié)果,允許存在多個(gè)*號(hào)。

分析: 在每個(gè)星號(hào)位置,我們需要進(jìn)行 0-9 的循環(huán)遍歷,因此每個(gè)星號(hào)位置都有 10 種可能性。如果字符數(shù)組中有k個(gè)星號(hào),那么總共有 10k 個(gè)可能的替換結(jié)果。

即輸入12345*時(shí),我們會(huì)得到 10 個(gè)結(jié)果,期望的結(jié)果如下:

123450
123451
123452
123453
123454
123455
123456
123457
123458
123459

輸入1234**時(shí),我們會(huì)得到 100 個(gè)結(jié)果,期望的結(jié)果如下:

123400
123401
123402
......
123499

輸入******時(shí),我們會(huì)得到 1000000 個(gè)結(jié)果。

解決方案

我們可以使用遞歸方式來依次實(shí)現(xiàn)將字符串中的星號(hào)替換為 0-9 的數(shù)字。

/**
 * 將輸入的字符串中的星號(hào)替換為0-9中的數(shù)字,并返回所有可能的替換結(jié)果
 * @param input 輸入的字符串
 * @return 所有可能的替換結(jié)果
 */
public static List<String> replaceStars(String input) {
    List<String> result = new ArrayList<>();
    int index = input.indexOf('*'); // 找到第一個(gè)星號(hào)的位置
    if (index == -1) { // 如果字符串中沒有星號(hào)
        result.add(input); // 直接將原字符串添加到結(jié)果列表中
    } else {
        for (int i = 0; i < 10; i++) { // 循環(huán)0-9中的數(shù)字
            // 將星號(hào)替換為當(dāng)前數(shù)字
            String replaced = input.substring(0, index) + i + input.substring(index + 1);
            // 對(duì)替換后的字符串再次調(diào)用replaceAsterisks方法,直到字符串中不再有星號(hào)
            result.addAll(replaceStars(replaced));
        }
    }
    return result;
}

代碼中的replaceStars方法會(huì)首先查找輸入字符串中的第一個(gè)星號(hào)的位置。

如果找不到星號(hào),表示已經(jīng)完成了一次替換,將當(dāng)前字符串添加到結(jié)果列表中;

否則,就用 0-9 中的數(shù)字依次替換星號(hào),并對(duì)替換后的字符串再次調(diào)用replaceStars方法,直到字符串中不再有星號(hào)。

最后收集并返回所有的替換結(jié)果。

代碼優(yōu)化

我們可以通過下標(biāo)索引追蹤當(dāng)前要處理的字符索引。

優(yōu)化后如下:

/**
 * 遞歸輔助函數(shù),用于將字符數(shù)組中的星號(hào)替換為0-9之間的數(shù)字
 * @param chars 字符數(shù)組
 * @param index 當(dāng)前處理的字符索引
 * @param result 存儲(chǔ)替換結(jié)果的列表
 */
private static void replaceStars(char[] chars, int index, List<String> result) {
    if (index == chars.length) { // 如果已經(jīng)處理完了所有字符
        result.add(new String(chars)); // 將字符數(shù)組轉(zhuǎn)換為字符串并添加到結(jié)果列表中
        return;
    }

    if (chars[index] == '*') { // 如果當(dāng)前字符是星號(hào)
        for (char c = '0'; c <= '9'; c++) { // 循環(huán)0-9中的數(shù)字
            chars[index] = c; // 將星號(hào)替換為當(dāng)前數(shù)字
            replaceStars(chars, index + 1, result); // 繼續(xù)處理下一個(gè)字符
        }
        chars[index] = '*'; // 恢復(fù)星號(hào),以便處理下一個(gè)星號(hào)
    } else {
        replaceStars(chars, index + 1, result); // 如果當(dāng)前字符不是星號(hào),則繼續(xù)處理下一個(gè)字符
    }
}

首先判斷是否已經(jīng)處理完了所有字符,即index是否等于chars數(shù)組的長(zhǎng)度。如果是,則表示已經(jīng)處理完所有字符,此時(shí)將字符數(shù)組轉(zhuǎn)換為字符串并添加到結(jié)果列表result中,然后返回。

如果當(dāng)前字符是星號(hào),就需要將星號(hào)替換為 0-9 之間的數(shù)字。通過一個(gè)循環(huán)遍歷 0-9 中的數(shù)字,每次將星號(hào)替換為當(dāng)前數(shù)字,并遞歸調(diào)用自身處理下一個(gè)字符(即將index加1)。這樣會(huì)產(chǎn)生多次遞歸調(diào)用,每次調(diào)用都會(huì)處理下一個(gè)星號(hào)位置的數(shù)字替換。

在循環(huán)結(jié)束后,需要恢復(fù)星號(hào),以便處理下一個(gè)星號(hào)位置的數(shù)字替換。

如果當(dāng)前字符不是星號(hào),則直接遞歸調(diào)用自身,繼續(xù)處理下一個(gè)字符。

效率分析對(duì)比

優(yōu)化前后的方法效率對(duì)比如下:

執(zhí)行次數(shù)數(shù)據(jù)量花費(fèi)時(shí)間(ms)[優(yōu)化]花費(fèi)時(shí)間(ms)
11000
210200
310330
410471
5105446
610623842

本文所實(shí)現(xiàn)方法的時(shí)間復(fù)雜度是 O(10k),其中 k 是字符數(shù)組中星號(hào)的數(shù)量。

隨著星號(hào)數(shù)量的增加,可能的替換結(jié)果數(shù)量呈指數(shù)級(jí)增長(zhǎng),那么這個(gè)方法會(huì)變得非常耗時(shí)。因此,在處理具有大量星號(hào)的字符數(shù)組時(shí),考慮到時(shí)間復(fù)雜度的增長(zhǎng),需要優(yōu)化算法處理。

知識(shí)延展

Java如何將字符串中的敏感詞替換為相等數(shù)量的星號(hào)*

Java如何將字符串中的敏感詞替換為相等數(shù)量的星號(hào)*,這也是工作中遇到的問題,嘗試了很多種方式最后采用這一種,在這里分享一下我的解決方式,方式簡(jiǎn)單,希望對(duì)大家有用。如果大家有什么好的方式也歡迎分享!

 /**
     * 過濾字符串中的敏感詞匯
     * @param content   文本
     * @param sensitiveWord   敏感詞匯
     * @return
     */
    public String filterSensitiveWords(String content, String sensitiveWord) {
 
        if (content == null || sensitiveWord == null) {
            return content;
        }
 
        //獲取和敏感詞匯相同數(shù)量的星號(hào)
        String starChar = getStarChar(sensitiveWord.length());
 
        //替換敏感詞匯
        return content.replace(sensitiveWord, starChar);
    }
 
    //大部分敏感詞匯在10個(gè)以內(nèi),直接返回緩存的字符串
    public static String[] starArr={"*","**","***","****","*****","******","*******","********","*********","**********"};
 
    /**
     * 生成n個(gè)星號(hào)的字符串
     * @param length
     * @return
     */
    private static String getStarChar(int length) {
        if (length <= 0) {
            return "";
        }
        //大部分敏感詞匯在10個(gè)以內(nèi),直接返回緩存的字符串
        if (length <= 10) {
            return starArr[length - 1];
        }
 
        //生成n個(gè)星號(hào)的字符串
        char[] arr = new char[length];
        for (int i = 0; i < length; i++) {
            arr[i] = '*';
        }
        return new String(arr);
    }

到此這篇關(guān)于Java實(shí)現(xiàn)將字符串中的星號(hào)*替換為0-9中的數(shù)字的文章就介紹到這了,更多相關(guān)Java字符串替換內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot服務(wù)拆包打包的詳細(xì)實(shí)現(xiàn)過程

    SpringBoot服務(wù)拆包打包的詳細(xì)實(shí)現(xiàn)過程

    文章詳細(xì)介紹了如何使用Maven插件對(duì)SpringBoot服務(wù)進(jìn)行拆包打包,包括使用maven-shade-plugin和maven-jar-plugin配置,以及如何通過assembly.xml實(shí)現(xiàn)自定義打包結(jié)構(gòu),需要的朋友可以參考下
    2026-02-02
  • 布隆過濾器(Bloom Filter)的Java實(shí)現(xiàn)方法

    布隆過濾器(Bloom Filter)的Java實(shí)現(xiàn)方法

    下面小編就為大家?guī)硪黄悸∵^濾器(Bloom Filter)的Java實(shí)現(xiàn)方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-12-12
  • idea如何添加工具到導(dǎo)航欄

    idea如何添加工具到導(dǎo)航欄

    文章介紹了如何在IntelliJ IDEA中將工具欄添加到導(dǎo)航欄,并具體步驟如下:勾選Toolbar,進(jìn)入File下的Settings,選擇MainToolbar,添加Action并選擇Settings和ProjectStructure,最后點(diǎn)擊OK將其添加到工具欄
    2025-01-01
  • Mybatis-plus foreach拼接字符串查詢無數(shù)據(jù)返回問題

    Mybatis-plus foreach拼接字符串查詢無數(shù)據(jù)返回問題

    這篇文章主要介紹了Mybatis-plus foreach拼接字符串查詢無數(shù)據(jù)返回問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • 深入理解MyBatis中的一級(jí)緩存與二級(jí)緩存

    深入理解MyBatis中的一級(jí)緩存與二級(jí)緩存

    這篇文章主要給大家深入的介紹了關(guān)于MyBatis中一級(jí)緩存與二級(jí)緩存的相關(guān)資料,文中詳細(xì)介紹MyBatis中一級(jí)緩存與二級(jí)緩存的工作原理及使用,對(duì)大家具有一定的參考性學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。
    2017-06-06
  • 簡(jiǎn)單的用java實(shí)現(xiàn)讀/寫文本文件的示例

    簡(jiǎn)單的用java實(shí)現(xiàn)讀/寫文本文件的示例

    同時(shí)也展示了如果從輸入流中讀出來內(nèi)容寫入輸出流中(僅限文本流) 三個(gè)例子可以獨(dú)立存在,所以根據(jù)需要只看其中一個(gè)就行了。
    2008-07-07
  • Java實(shí)現(xiàn)PDF批量處理之合并、拆分、加水印的技術(shù)方案與實(shí)踐

    Java實(shí)現(xiàn)PDF批量處理之合并、拆分、加水印的技術(shù)方案與實(shí)踐

    在日常開發(fā)中,PDF文檔處理是一個(gè)高頻需求,無論是合同管理系統(tǒng)需要合并多份PDF,還是報(bào)表系統(tǒng)需要按頁拆分,亦或是給機(jī)密文檔添加水印,都需要一套可靠的PDF處理方案,本文將分享基于Java技術(shù)棧實(shí)現(xiàn)PDF批量處理的核心思路與代碼實(shí)踐,需要的朋友可以參考下
    2026-02-02
  • Java getRealPath(

    Java getRealPath("/")與getContextPath()區(qū)別詳細(xì)分析

    這篇文章主要介紹了Java getRealPath("/")與getContextPath()區(qū)別詳細(xì)分析,本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • Springboot整合freemarker 404問題解決方案

    Springboot整合freemarker 404問題解決方案

    這篇文章主要介紹了Springboot整合freemarker 404問題解決方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • maven?導(dǎo)入resource?lib文件夾中的jar的幾種方法

    maven?導(dǎo)入resource?lib文件夾中的jar的幾種方法

    本文主要介紹了maven?導(dǎo)入resource?lib文件夾中的jar的幾種方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-05-05

最新評(píng)論

永泰县| 高青县| 天台县| 敖汉旗| 堆龙德庆县| 新干县| 宁强县| 新津县| 板桥市| 将乐县| 丰顺县| 崇左市| 徐汇区| 黔南| 霍山县| 互助| 河北省| 秦皇岛市| 安福县| 鸡东县| 甘泉县| 新余市| 高台县| 中阳县| 霍山县| 西乡县| 库伦旗| 奉化市| 北碚区| 桓仁| 石嘴山市| 和硕县| 连云港市| 宁阳县| 雷波县| 伊宁县| 沿河| 旌德县| 高州市| 江北区| 筠连县|