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

Java NumberFormatException问题求助:字符串转整数报错

解决NumberFormatException:输入字符串为空的问题

看起来你是在处理带逗号和空格的输入字符串转整数数组时踩坑了,这个NumberFormatException的根源很明确——你代码里尝试把空字符串转换成整数了,这肯定会炸。结合你的需求和代码片段,我帮你梳理下问题和修复方案:

问题出在哪?

  1. 输入读取的坑:你用sc.nextInt()读取count后,输入流里还留着用户按下的换行符,这时候如果后续用sc.nextLine()读取输入字符串,会直接读到这个空的换行内容,处理后自然是空字符串,转int就报错。
  2. 字符串处理不严谨:如果输入里有连续的逗号/空格,或者开头结尾的分隔符,直接移除后可能会产生空的子串,转int同样会触发异常。

修复后的完整代码

import java.util.ArrayList;
import java.util.Scanner;

public class SeriesSolution {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int count = sc.nextInt();
        // 关键:吃掉nextInt()留下的换行符,避免后续nextLine读空
        sc.nextLine();

        ArrayList<Integer> modes = new ArrayList<>();
        for (int x = 0; x < count; x++) {
            // 读取一行输入,先去掉首尾空白
            String input = sc.nextLine().trim();
            // 用正则分割:匹配一个或多个逗号/空格,避免产生空串
            String[] parts = input.split("[,\\s]+");
            for (String part : parts) {
                // 过滤掉可能的空串,再转整数
                if (!part.isEmpty()) {
                    modes.add(Integer.parseInt(part));
                }
            }
        }

        // 测试输出验证结果
        System.out.println("转换后的整数数组:");
        modes.forEach(num -> System.out.print(num + " "));
        
        sc.close();
    }
}

核心修改点说明

  • 处理输入流残留:sc.nextInt()只会读取数字,不会处理后面的换行,所以必须加一行sc.nextLine()把这个换行符消耗掉,这样后续的sc.nextLine()才能正确拿到用户输入的内容。
  • 更安全的分割方式:用正则[,\\s]+来分割字符串,它会把连续的逗号、空格当成一个分隔符,不会产生空的子串。
  • 空串过滤:最后再加一层判断,确保只有非空的字符串才会被转换成整数,从根源上避免NumberFormatException。

内容的提问来源于stack exchange,提问作者Muiz Uvais

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:54:06