题目描述
给定一个字符串 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
不使用额外空间
- 不使用额外空间:通过原地修改字符数组来处理字符串。
- 从后往前遍历:为了避免覆盖未处理的字符,我们从字符串的末尾开始遍历,并在新的数组中从末尾插入。
- 空间优化:因为数字替换成了"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);}
}