如何将字符串内的ASCII值子串转为对应字符并修复Java代码报错问题
解法思路
- 利用ASCII码取值范围为0~127、最长为3位的特点,遍历字符串时遇到非数字字符直接保留,遇到数字则收集后续连续的所有数字字符转成对应ASCII字符
- 手动控制遍历指针的步进长度,处理完N位数字后指针直接跳N步,避免重复遍历和数组越界
- 推荐用
StringBuilder做字符串拼接,性能远高于直接对String做加法操作
完整可运行代码
public class AsciiConverter { public static void main(String[] args) { String str = "H105 68u100e33 65r101 89o117?"; StringBuilder output = new StringBuilder(); int i = 0; int len = str.length(); while (i < len) { char current = str.charAt(i); if (!Character.isDigit(current)) { // 非数字直接追加,指针走1步 output.append(current); i++; } else { // 收集连续的所有数字 StringBuilder numStr = new StringBuilder(); while (i < len && Character.isDigit(str.charAt(i))) { numStr.append(str.charAt(i)); i++; } // 转成ASCII字符追加 int asciiCode = Integer.parseInt(numStr.toString()); output.append((char) asciiCode); } } System.out.println("output : " + output); } }
运行结果
代码执行后输出如下,和需求完全匹配:
output : Hi Dude! Are You?
问题修复说明
- 支持任意长度的连续数字转换,自然覆盖3位ASCII的处理需求
- 每次调用
charAt前都会判断指针是否超出字符串长度,彻底避免数组越界错误 - 严格匹配规则:每个非数字字符(字母、空格、标点)后跟随的连续数字都会被整体转义,不需要提前固定数字位数
内容的提问来源于stack exchange,提问作者Badcoder
相关产品推荐
相关产品推荐

