Scanner中的next和nextLine的理解

在做题的时候遇到了这个问题  之前一直用的nextLine 来接受字符串 虽然看到了next但是并没有深入的想 知道接连犯了很多错误之后才回到现在重新考虑这个小问题

首先从字面上理解 next是下一个  nextLine是下一行 

从实际作用看  next是获得下一个实际起作用的字符串  其中空格 Tab Enter都会被其看作分隔符或者终止符不被考虑

如下面

import java.util.Scanner;
public class TestScanner {
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  //首先测验next()
  System.out.println("现在开始测验");
  Scanner scanner=new Scanner(System.in);
  String str1,str2;
  str1=scanner.next();
  str2=scanner.next();
  System.out.println(str1+"\t"+str2);
  scanner.close();
 }
}

实际上输出是

现在开始测验
1                    2
1      2

输入的一大串空格都被看作是分隔符 没有被考虑

而nextLine会考虑空格符和制表符 而仅仅只将Enter作为分隔符

再想想为什么会有时候NextLine 没有接收到数据呢  有时候  比如说这样

int num=scanner.nextInt();

String str=scanner.nextLine();

这时候你输入进一个数 输入完成之后按Enter结束  此时nextInt‘\n’符作为中止符没有接收 而被下面的nextLine()识别接收 nextLine认为已经输入完成 其实什么也没有输

而使用Next就不会出现这种问题  原因是next必须接收到有效字符才会可能退出

下面是一个例子:

 

import java.util.Scanner;
public class TestScanner {
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  //首先测验next()
  System.out.println("现在开始测验");
  Scanner scanner=new Scanner(System.in);
  String str1;
  int num=scanner.nextInt();
  str1=scanner.nextLine();
  System.out.println(str1+"    "+1);
  scanner.close();
 }
}
输出是
现在开始测验
123
    1
直接就是没等我输入就输出了 
换成next之后输出是这样:

现在开始测验
123
asdasd
asdasd    1可以看到正常输出了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值