Java NumberFormatException问题求助:字符串转整数报错
解决NumberFormatException:输入字符串为空的问题
看起来你是在处理带逗号和空格的输入字符串转整数数组时踩坑了,这个NumberFormatException的根源很明确——你代码里尝试把空字符串转换成整数了,这肯定会炸。结合你的需求和代码片段,我帮你梳理下问题和修复方案:
问题出在哪?
- 输入读取的坑:你用
sc.nextInt()读取count后,输入流里还留着用户按下的换行符,这时候如果后续用sc.nextLine()读取输入字符串,会直接读到这个空的换行内容,处理后自然是空字符串,转int就报错。 - 字符串处理不严谨:如果输入里有连续的逗号/空格,或者开头结尾的分隔符,直接移除后可能会产生空的子串,转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
相关产品推荐
相关产品推荐

