自学内容网 自学内容网

算法:替换数字

题目描述

给定一个字符串 s,它包含小写字母和数字字符,请编写一个函数,将字符串中的字母字符保持不变,而将每个数字字符替换为number。 例如,对于输入字符串 "a1b2c3",函数应该将其转换为 "anumberbnumbercnumber"。

输入描述

输入一个字符串 s,s 仅包含小写字母和数字字符。

输出描述

打印一个新的字符串,其中每个数字字符都被替换为了number

输入示例
a1b2c3
输出示例
anumberbnumbercnumber

方法1

 

public class ReplaceDigits {
    public static String replaceDigitsWithNumber(String s) {
        // 使用StringBuilder来构建最终的结果字符串
        StringBuilder result = new StringBuilder();

        // 遍历字符串中的每一个字符
        for (char c : s.toCharArray()) {
            // 判断当前字符是否是数字字符
            if (Character.isDigit(c)) {
                // 如果是数字,则替换为"number"
                result.append("number");
            } else {
                // 如果是字母字符,则保持不变,直接添加到结果中
                result.append(c);
            }
        }

        // 返回构建好的字符串
        return result.toString();
    }

    public static void main(String[] args) {
        // 测试用例
        String input = "a1b2c3";
        String output = replaceDigitsWithNumber(input);
        System.out.println(output); // 输出应为 "anumberbnumbercnumber"
    }
}

方法2

不使用额外空间

  1. 不使用额外空间:通过原地修改字符数组来处理字符串。
  2. 从后往前遍历:为了避免覆盖未处理的字符,我们从字符串的末尾开始遍历,并在新的数组中从末尾插入。
  3. 空间优化:因为数字替换成了"number",一个数字占1个字符,替换后是6个字符,所以需要计算最终字符数组的大小,并进行替换。

输出: 输入 "a1b2c3",最终输出为 "anumberbnumbercnumber"

import java.util.Scanner;

public class ReplaceDigitsInPlace {

    // 定义替换函数
    public static String replaceDigitsWithNumber(String s) {
        // 将字符串转换为字符数组
        char[] chars = s.toCharArray();
        
        // 计算最终字符串的长度 (每个数字字符会被替换成 6 个字符 "number")
        int numberCount = 0;
        for (char c : chars) {
            if (Character.isDigit(c)) {
                numberCount++;
            }
        }
        
        // 如果没有数字字符,直接返回原字符串
        if (numberCount == 0) {
            return s;
        }
        
        // 创建一个新的字符数组,大小为原始长度 + 替换部分的长度差
        char[] newChars = new char[chars.length + numberCount * 5]; // 每个数字增加 5 个字符
        
        // 从后向前遍历,进行替换(从新数组的最后一位开始填充)
        int j = newChars.length - 1;
        for (int i = chars.length - 1; i >= 0; i--) {
            if (Character.isDigit(chars[i])) {
                // 替换数字为 "number"
                newChars[j--] = 'r';
                newChars[j--] = 'e';
                newChars[j--] = 'b';
                newChars[j--] = 'm';
                newChars[j--] = 'u';
                newChars[j--] = 'n';
            } else {
                // 非数字字符直接复制
                newChars[j--] = chars[i];
            }
        }
        
        // 将字符数组转换为字符串并返回
        return new String(newChars);
    }

    public static void main(String[] args) {
        // 使用 Scanner 接收键盘输入
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入一个包含字母和数字的字符串: ");
        String input = scanner.nextLine();
        
        // 调用函数并输出结果
        String output = replaceDigitsWithNumber(input);
        System.out.println("转换后的字符串: " + output);
    }
}

 


原文地址:https://blog.csdn.net/m0_67281369/article/details/142412554

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!