关于java输入字符串的一些问题

最近自学java,学到了Scanner类这块,我想着测试一下输入,遇到了个问题,我想要输入两个字符串,但是我输入一个字符串后程序就停止运行了,有点疑惑,我的代码如下

s1=scan.next();
System.out.print(s1);

s2=scan.nextLine();
System.out.print(s2);

结果就是只能输出s1,然后我就想起来这两种输入方式的区别

next() 与 nextLine() 区别

next():

    1、一定要读取到有效字符后才可以结束输入。
    2、对输入有效字符之前遇到的空白,next() 方法会自动将其去掉。
    3、只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符。
    4、next() 不能得到带有空格的字符串。

nextLine():

    1、以Enter为结束符,也就是说 nextLine()方法返回的是输入回车之前的所有字符。
    2、可以获得空白。

 输入一个字符串后我们会按回车结束,我们按的回车键也会送入键盘缓冲区作为输入的一部分只不过会被转化为换行符,而且这两种方法都不会把输入的回车给取走,也就是说输入s1的时候输入字符串+回车,next()仅仅是把字符串取走,回车还留在缓冲区中,这样程序接着执行到next()的时候nextLine()就会取走回车,因为nextLine()取字符串是以回车为结束标志,所以就会造成以上问题,只能输入一个有效的字符串。

要解决这个问题,只需要在第一个next后在加一个nextLine()取走进入缓冲区的回车符,这样程序执行到下一个nextLine()时就会等待我们输入下一个字符串了,如下:

s1 = scan.next();
System.out.print(s1);
scan.nextLine(); // 取走回车键
s2 = scan.nextLine();
System.out.print(s2);

需要注意的是:不能使用next()来取回车键,因为像上面说过的对输入有效字符之前遇到的空白,next() 方法会自动将其去掉,对next()来说回车键不是一个有效字符所以会自动将它去掉,然后等待用户输入下一个有效字符串。

使用nextLine()因为它以回车为结束符,遇到回车就会停止读取字符并返回回车前取到的字符串(会将回车符消耗掉),这里就是返回一个空字符。

  • 8
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中有几种方法可以输入字符串。其中,常用的方法有使用Scanner类的next()和nextLine()方法以及使用BufferedReader类的readLine()方法。 使用Scanner类的next()方法可以输入一个不带空格的字符串。该方法会自动去除输入中的空格、Tab键或Enter键等结束符,并返回下一个完整的标记。但是,注意该方法无法获取带有空格的字符串。 使用Scanner类的nextLine()方法可以输入一个带空格的字符串。该方法的结束符只有Enter键,返回的结果是Enter键之前的所有字符,可以得到包含空格的字符串。 另外,你还可以使用BufferedReader类的readLine()方法来输入字符串。这个方法可以读取一行输入并返回一个包含该行内容的字符串。它可以获取包含空格的字符串,并且以Enter键作为结束符。 下面是使用Scanner和BufferedReader两种方法输入字符串的示例代码: 使用Scanner类: ```java import java.util.Scanner; public class Test { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("请输入一段字符串:"); String str = scanner.next(); System.out.println("使用next()方法输入的字符串:" + str); System.out.println("请输入另一段字符串:"); String str1 = scanner.nextLine(); System.out.println("使用nextLine()方法输入的字符串:" + str1); } } ``` 使用BufferedReader类: ```java import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Test { public static void main(String[] args) { try { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.println("请输入一段字符串:"); String str = br.readLine(); System.out.println("使用readLine()方法输入的字符串:" + str); } catch (IOException e) { e.printStackTrace(); } } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值