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

如何让Scanner扫描指定长度字符后停止?优化控制台输入处理

解决方案:限制控制台输入读取的字符数

直接用Scanner.nextLine()确实会读取整行全部内容,哪怕你只需要前99个字符,这种场景下改用底层字符流读取会更高效——直接控制读取的字符数量,避免冗余内容加载到内存。

可以用BufferedReader配合InputStreamReader实现,核心思路是创建固定长度的字符数组,只读取最多99个字符,或者在遇到换行/输入结束时提前停止:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class LimitedInputReader {
    public static void main(String[] args) {
        final int MAX_LENGTH = 99;
        char[] buffer = new char[MAX_LENGTH];
        int charsRead = 0;
        
        try (BufferedReader reader = new BufferedReader(new InputStreamReader(System.in))) {
            // 读取最多MAX_LENGTH个字符,或直到换行/流结束
            charsRead = reader.read(buffer, 0, MAX_LENGTH);
            
            if (charsRead > 0) {
                int endIndex = charsRead;
                // 处理换行符,模拟nextLine()只读取到换行前的逻辑
                for (int i = 0; i < charsRead; i++) {
                    if (buffer[i] == '\n' || buffer[i] == '\r') {
                        endIndex = i;
                        break;
                    }
                }
                String input = new String(buffer, 0, endIndex);
                System.out.println("读取到的内容:" + input);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

逻辑说明:

  • reader.read(buffer, 0, MAX_LENGTH) 会尝试从输入流读取最多99个字符到缓冲区,返回实际读取的字符数(如果输入不足99个,就返回实际数量)。
  • 额外处理换行符:如果在读取到99个字符前遇到换行(\n或\r),就截断到换行位置,和nextLine()的行为保持一致。
  • 用try-with-resources自动关闭流,避免资源泄漏。

这种方式不会读取超过需求的字符,哪怕用户粘贴了巨量内容,也只会加载前99个(或换行前的)字符到内存,完全避免资源浪费。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 01:51:03