Java新手求助:替换首字符外匹配字符为星号报错如何解决
解决字符串替换后的NumberFormatException问题
你遇到的这个错误根源很清晰:你在代码里多做了一步不必要的数字转换操作!处理后的字符串里包含星号*,它不是数字字符,当你尝试把这个带星号的字符串转成int或long类型时,Java自然会抛出NumberFormatException。
你的核心需求是字符串替换,完全不需要涉及数字转换,先把那些尝试解析数字的代码(比如Integer.parseInt(...))删掉,然后用下面的正确方式实现需求:
方法一:手动遍历字符串(适合新手理解逻辑)
这种方式步骤清晰,能直观看到每个字符的处理过程:
public class Main { public static void main(String[] args) { String input = "1231231231"; // 先处理空字符串的边界情况 if (input.isEmpty()) { System.out.println(""); return; } char firstChar = input.charAt(0); StringBuilder result = new StringBuilder(); result.append(firstChar); // 保留首字符 // 从第二个字符开始遍历处理 for (int i = 1; i < input.length(); i++) { char currentChar = input.charAt(i); // 和首字符相同就替换为*,否则保留原字符 result.append(currentChar == firstChar ? '*' : currentChar); } // 直接输出结果字符串,不要转数字! System.out.println(result.toString()); } }
方法二:用正则表达式(更简洁的实现)
如果想让代码更紧凑,可以用正则匹配替换,注意要排除首字符的位置:
import java.util.regex.Pattern; public class Main { public static void main(String[] args) { String input = "1231231231"; if (input.isEmpty()) { System.out.println(""); return; } char firstChar = input.charAt(0); // 正则规则:匹配除第一个字符外,所有和首字符相同的字符 // Pattern.quote是为了避免首字符是正则特殊字符(比如.、+)时出错 String regex = "(?<=.)" + Pattern.quote(String.valueOf(firstChar)); String result = input.replaceAll(regex, "*"); System.out.println(result); } }
最后再敲个重点
一定要检查你的代码,找到类似Integer.parseInt(处理后的字符串)或者Long.parseLong(...)的代码行,把它们删掉——你的输出结果是带星号的字符串,根本不是数字,完全不需要这一步多余的转换!
内容的提问来源于stack exchange,提问作者BlockCoder
相关产品推荐
相关产品推荐

