You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 07:18:38