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

如何解决Java输入类无输入时的崩溃问题?已尝试长度校验

解决方案:处理空输入避免StringIndexOutOfBoundsException

问题根源

当用户仅按下回车键时,scanner.nextLine()会返回长度为0的空字符串,此时直接调用substring(0,1)必然触发StringIndexOutOfBoundsException——空字符串不存在索引0的字符,超出了字符串的边界范围。

你的修改思路是正确的,但可以优化这几点:

  • 避免重复创建Scanner实例:每次调用input()都新建Scanner会浪费系统资源,建议将Scanner声明为类成员变量复用。
  • 过滤空白输入:如果用户输入全空格,当前代码会取第一个空格作为有效输入,若业务需要排除纯空白情况,可先通过trim()处理输入。
  • 明确默认返回值:你当前默认返回空格" ",可根据实际业务需求调整为返回空字符串,或者添加循环提示用户重新输入有效内容。

优化后的代码示例

import java.util.Scanner;

public class LetterInput implements Input {
    // 类成员Scanner,复用实例
    private final Scanner scanner = new Scanner(System.in);

    public String input() {
        String inputString = scanner.nextLine();
        // 过滤前后空白,排除纯空格输入
        String trimmedInput = inputString.trim();
        
        if (trimmedInput.length() > 0) {
            return trimmedInput.substring(0, 1);
        } else {
            // 空输入时返回空字符串,可根据需求替换成提示逻辑
            return "";
        }
    }
    
    // 可选:长期运行的程序记得关闭Scanner释放资源
    public void close() {
        scanner.close();
    }
}

进阶方案:强制用户输入有效字符

如果业务要求必须获取至少一个非空白字符,可以通过循环提示直到用户输入有效内容:

import java.util.Scanner;

public class LetterInput implements Input {
    private final Scanner scanner = new Scanner(System.in);

    public String input() {
        String trimmedInput;
        do {
            System.out.print("请输入至少一个有效字符:");
            String inputString = scanner.nextLine();
            trimmedInput = inputString.trim();
        } while (trimmedInput.length() == 0);
        
        return trimmedInput.substring(0, 1);
    }
}

内容的提问来源于stack exchange,提问作者Michael K

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 01:24:29