欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

需求

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

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

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

123450
123451
123452
123453
123454
123455
123456
123457
123458
123459

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

123400
123401
123402
......
123499

輸入******時,我們會得到 1000000 個結(jié)果。

解決方案

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

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

代碼中的replaceStars方法會首先查找輸入字符串中的第一個星號的位置。

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

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

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

代碼優(yōu)化

我們可以通過下標索引追蹤當前要處理的字符索引。

優(yōu)化后如下:

/**
 * 遞歸輔助函數(shù),用于將字符數(shù)組中的星號替換為0-9之間的數(shù)字
 * @param chars 字符數(shù)組
 * @param index 當前處理的字符索引
 * @param result 存儲替換結(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] == '*') { // 如果當前字符是星號
        for (char c = '0'; c <= '9'; c++) { // 循環(huán)0-9中的數(shù)字
            chars[index] = c; // 將星號替換為當前數(shù)字
            replaceStars(chars, index + 1, result); // 繼續(xù)處理下一個字符
        }
        chars[index] = '*'; // 恢復星號,以便處理下一個星號
    } else {
        replaceStars(chars, index + 1, result); // 如果當前字符不是星號,則繼續(xù)處理下一個字符
    }
}

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

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

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

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

效率分析對比

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

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

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

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

知識延展

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

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

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

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

相關文章

  • maven中的scope與systemPath用法

    maven中的scope與systemPath用法

    這篇文章主要介紹了maven中的scope與systemPath用法,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Java?IO與NIO高效的輸入輸出操作深入探究

    Java?IO與NIO高效的輸入輸出操作深入探究

    這篇文章主要為大家介紹了Java?IO與NIO高效的輸入輸出操作深入探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-10-10
  • 全面解析Java支持的數(shù)據(jù)類型及Java的常量和變量類型

    全面解析Java支持的數(shù)據(jù)類型及Java的常量和變量類型

    這篇文章主要介紹了Java支持的數(shù)據(jù)類型及Java的常量和變量類型,是Java入門學習中的基礎知識,需要的朋友可以參考下
    2016-02-02
  • 一文搞懂SpringBoot如何利用@Async實現(xiàn)異步調(diào)用

    一文搞懂SpringBoot如何利用@Async實現(xiàn)異步調(diào)用

    異步調(diào)用幾乎是處理高并發(fā),解決性能問題常用的手段,如何開啟異步調(diào)用?SpringBoot中提供了非常簡單的方式,就是一個注解@Async。今天我們重新認識一下@Async,以及注意事項
    2022-09-09
  • Java HashMap算法原理詳細講解

    Java HashMap算法原理詳細講解

    在java開發(fā)中,HashMap是最常用、最常見的集合容器類之一,文中通過示例代碼介紹HashMap為啥要二次Hash,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2023-02-02
  • Java?不同版本的?Switch語句

    Java?不同版本的?Switch語句

    本文主要介紹了Java不同版本的Switch語句,自Java13以來,Switch表達式就被添加到Java核心庫中,下面我們將介紹舊的Java?Switch語句和新的Switch語句的區(qū)別,需要的朋友可以參考一下
    2022-06-06
  • springboot + mybatis + druid + 多數(shù)據(jù)源的問題詳解

    springboot + mybatis + druid + 多數(shù)據(jù)源的問題詳解

    這篇文章主要介紹了springboot + mybatis + druid + 多數(shù)據(jù)源的問題詳解,示例代碼文字相結(jié)合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • java DecimalFormat常用方法詳解

    java DecimalFormat常用方法詳解

    這篇文章主要為大家詳細介紹了java DecimalFormat的常用方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • IntelliJ?IDEA?2020.2.3永久破解激活教程(親測有效)

    IntelliJ?IDEA?2020.2.3永久破解激活教程(親測有效)

    intellij?idea?2022是一款市面上最好的JAVA?IDE編程工具,該工具支持git、svn、github等版本控制工具,整合了智能代碼助手、代碼自動提示等功能,本教程給大家分享IDEA?2022最新永久激活碼,感興趣的朋友參考下吧
    2020-10-10
  • Java的深拷貝和淺拷貝深入了解

    Java的深拷貝和淺拷貝深入了解

    這篇文章主要為大家介紹了Java的深拷貝和淺拷貝,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01

最新評論