Java中 next() 和 nextLine() 有什么区别?一篇文章彻底搞懂

前言

在学习 Java 的 Scanner 输入时,很多人都会遇到这样一个问题:

复制代码
String str = sc.nextLine();
String str = sc.next();

这两个方法看起来都能接收字符串,那它们到底有什么区别?

刚开始学的时候,我也经常分不清,尤其是在输入带空格的内容时,很容易出错。

这篇文章就把这个知识点系统整理一下,帮助自己彻底搞懂。


一、先说结论

next()nextLine() 的核心区别在于:

  • next():读取一个单词
  • nextLine():读取一整行

也就是说:

  • next() 遇到 空格、Tab、回车 就停止
  • nextLine() 遇到 回车 才停止

二、next() 的作用

1. 基本特点

next() 用来读取输入中的一个字符串,但它只会读取到第一个分隔符之前的内容。

常见分隔符有:

  • 空格
  • Tab
  • 回车

也就是说,只要遇到这些,next() 就会停止读取。

2. 示例代码

复制代码
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str = sc.next();
        System.out.println(str);
    }
}

如果输入:

复制代码
hello world

输出结果是:

复制代码
hello

因为 next() 只会读取 hello,遇到空格就停下来了。


三、nextLine() 的作用

1. 基本特点

nextLine() 用来读取一整行字符串。

它不会因为空格而停止,只有当用户按下回车时,它才会结束读取。

2. 示例代码

复制代码
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();
        System.out.println(str);
    }
}

如果输入:

复制代码
hello world

输出结果是:

复制代码
hello world

因为 nextLine() 会把整行内容都读取进来,包括中间的空格。


四、两者最直观的区别

下面用表格来总结一下:

方法 读取范围 遇到空格 遇到回车
next() 一个单词 停止 停止
nextLine() 一整行 不停止 停止

五、举个简单例子

示例 1:使用 next()

复制代码
Scanner sc = new Scanner(System.in);
String str = sc.next();
System.out.println(str);

输入:

复制代码
I love Java

输出:

复制代码
I

因为 next() 只读取到第一个空格之前的内容。


示例 2:使用 nextLine()

复制代码
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
System.out.println(str);

输入:

复制代码
I love Java

输出:

复制代码
I love Java

因为 nextLine() 会读取整行。


六、开发中什么时候用哪个?

next() 的情况

如果你只想输入一个不带空格的内容,比如:

  • 用户名
  • 单个单词
  • 简单标识符

可以使用:

复制代码
sc.next();

nextLine() 的情况

如果你想输入一整句话,或者内容中可能带空格,比如:

  • 姓名
  • 地址
  • 自我介绍
  • 一整行文本

应该使用:

复制代码
sc.nextLine();

七、最容易踩的坑:nextInt() 后面接 nextLine()

这是初学 Java 时非常常见的一个问题。

示例代码

复制代码
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int age = sc.nextInt();
        String name = sc.nextLine();

        System.out.println(age);
        System.out.println(name);
    }
}

输入:

复制代码
18
Tom

你本来以为输出会是:

复制代码
18
Tom

但实际上很可能变成:

复制代码
18

也就是 name 读到了空字符串。


八、为什么会出现这个问题?

因为:

  • nextInt() 只读取了数字 18
  • 输入完成后你按下的那个 回车符 ,并没有被 nextInt() 读走
  • 接下来执行 nextLine() 时,它会直接把这个剩下的回车读掉
  • 所以得到的就是一个空字符串

九、正确写法

如果前面用了 nextInt()nextDouble()next() 这类方法,后面又要用 nextLine(),通常要先额外写一行把回车吃掉。

正确示例

复制代码
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int age = sc.nextInt();
        sc.nextLine(); // 吃掉回车

        String name = sc.nextLine();

        System.out.println(age);
        System.out.println(name);
    }
}

输入:

复制代码
18
Tom

输出:

复制代码
18
Tom

这样才是我们想要的结果。

相关推荐
就叫_这个吧16 分钟前
Java递归方法实现面包屑导航
java·开发语言
fīɡЙtīиɡ ℡32 分钟前
AI 应用系统设计
java·开发语言·人工智能
城管不管40 分钟前
重生——第十一次面试之挖财一面2026.8.19已OC
java·服务器·jvm·数据库·spring·面试·职场和发展
码匠许师傅40 分钟前
【C++ 面试真题】26. 聊聊 C++ 的智能指针
java·c++·面试
AI绘画哇哒哒1 小时前
【建议收藏!】35岁后端血泪忠告,这3类人别硬转Agent(过来人亲述)
java·人工智能·后端·ai·程序员·大模型·agent
最强小杰2 小时前
gpt-5.6-sol 频繁报 503 怎么办?区分容量熔断和限速 429 的排查方法 + 可复用 retry wrapper
java·人工智能·gpt·ai
今天AI了吗2 小时前
Python 基础语法(一):常量、变量、输入输出与运算符
开发语言·数据库·人工智能·python·sql·深度学习·机器学习
liuyicenysabel2 小时前
多服务上线日记三:
运维·服务器·笔记·学习
CHENGQUAN_kenan2 小时前
佛山亚马逊卖家出口退税合规指南|9610免税、一般贸易退税、无票采购、申报误区全覆盖
大数据·经验分享·笔记·百度
YM52e3 小时前
鸿蒙ArkTS实战项目 - 门店陈列巡检台:巡检卡片与多列切换实现
学习·华为·harmonyos