Scanner.next()会“被空格截断”是因为它以空白字符为分隔符,只读取下一个完整token;应改用nextLine()读取整行,但需注意nextInt()等方法遗留换行符导致nextLine()返回空字符串的问题。
Java 中
默认以空白字符(空格、制表符、换行符)为分隔符,因此遇到第一个空格就会停止读取,导致“被空格截断”。要完整读取含空格的字符串(如用户姓名、地址、一句话),应改用
,但需注意它与
混用时的缓冲区残留问题。
为什么 next() 会“意外截断”
只读取下一个**完整标记(token)**,即从当前位置跳过前导空白后,读到下一个空白前为止。例如输入
,
返回
,而
仍留在缓冲区中——这不是 bug,而是其设计意图(类似词法分析)。
正确读取整行含空格字符串:用 nextLine()
直接调用
可读取当前行剩余全部字符(包括中间空格),直到换行符为止。关键点:
它会消费掉换行符,不会残留
若之前调用了
、
等方法,它们不消费换行符,会导致紧接着的
立即返回空字符串
避免缓冲区干扰的典型写法
当混合读取数值和字符串时,务必在数值读取后手动“清空”换行符:
立即学习
“
Java免费学习笔记(深入)
”;
Eclipse导入Android或其他的JAVA项目的正确方法 WORD版
本文档主要讲述的是Eclipse导入Android或其他的JAVA项目的正确方法;希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看
下载
或者统一使用
并手动解析数值:
需要按空格分割但仍保留原始输入?用 nextLine() + split()
如果目标是获取完整输入后再按空格切分(比如命令行参数解析),不要依赖
循环,而是先读整行,再处理:
这样既避免截断,又保留了对空格语义的完全控制。
Scanner.next()Scanner.nextLine()next()next()"Hello World"next()"Hello""World"nextLine()next()nextInt()nextLine()Scanner sc = new Scanner(System.in);
System.out.print("年龄: ");
int age = sc.nextInt(); // 不消费 '
'
sc.nextLine(); // 消费掉上一行遗留的换行符
System.out.print("姓名: ");
String name = sc.nextLine(); // 现在能正确读取含空格的姓名
nextLine()System.out.print("年龄: ");
int age = Integer.parseInt(sc.nextLine().trim());
System.out.print("姓名: ");
String name = sc.nextLine();
next()System.out.print("请输入多个单词: ");
String line = sc.nextLine(); // 读入 "apple banana cherry"
String[] words = line.split("\s+"); // 按一个或多个空白分割
