如何让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
相关产品推荐
相关产品推荐

