在做题的时候遇到了这个问题 之前一直用的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();
}
// 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();
}
// 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
123
1
直接就是没等我输入就输出了
换成next之后输出是这样:
现在开始测验
123
asdasd
asdasd 1可以看到正常输出了