Java实现字符串内数字平方后替换原数字的功能开发求助
当前代码的核心问题
你写的逻辑距离可运行的正确实现差两个核心环节:
- 循环内仅把计算出的平方值打印到控制台,没有统一的内容收集容器,方法最终直接返回空字符串,既没有留存原字符串里的非数字字符,也没有把计算后的平方值纳入返回内容
- 固定长度
char[]的替换思路不兼容多位数的平方结果:比如数字9平方后是81,占2个字符长度,没法直接替换原数组里单个字符的位置,长度完全不匹配
实现方案(适配初学者理解成本)
用Java自带的可变字符串类StringBuilder做结果收集,逻辑无复杂技巧:
- 初始化空的
StringBuilder实例,全程用它拼接最终要返回的内容 - 遍历原字符串的每一个字符,按类型分别处理:
- 遇到非数字字符:直接把字符追加到
StringBuilder末尾 - 遇到数字字符:先算出对应的数值(不需要把char转成字符串再解析为int,数字字符的ASCII值是连续的,字符减去'0'的偏移量就能直接得到对应的整数),计算平方后,把平方值直接追加到
StringBuilder中(类本身会自动把整数转成对应格式的字符串)
- 遇到非数字字符:直接把字符追加到
- 遍历完成后把
StringBuilder的内容转成普通String返回即可
修改后可直接运行的完整代码
public class Code { public static void main(String[] args) { // 要求的测试场景1 System.out.println(squareDigits("a22b")); // 输出a44b // 要求的测试场景2 System.out.println(squareDigits("a9b2")); // 输出a81b4 // 原有测试用例 String ok = "a2b9"; System.out.println(squareDigits(ok)); // 输出a81b4 } public static String squareDigits(String s) { // 初始化可变字符串容器,收集最终结果 StringBuilder result = new StringBuilder(); // 遍历原字符串的每一个字符 for (char c : s.toCharArray()) { if (Character.isDigit(c)) { // 字符转对应整数:利用数字字符ASCII连续的特性,减'0'直接得到数值 int num = c - '0'; // 计算平方,直接追加到结果中 result.append(num * num); } else { // 非数字字符直接追加 result.append(c); } } // 转成普通字符串返回 return result.toString(); } }
运行效果校验
对照要求的场景逐行走逻辑即可确认正确性:
- 输入
a22b:依次追加a→ 第一个2的平方值4 → 第二个2的平方值4 →b,最终输出a44b - 输入
a9b2:依次追加a→ 9的平方值81 →b→ 2的平方值4,最终输出a81b4
完全匹配预期运行效果。
内容的提问来源于stack exchange,提问作者Denis Suhachev
相关产品推荐
相关产品推荐

