一、next() : 只读缓冲区中空格之前的数据,并且光标指向本行。
二、nextLine() : 读取除回车以外的所有符号(整行内容),光标定位在下一行
三、hasNext() :检查下一个标记(token),也就是以空格、制表符或换行符为分隔符的一个单词。如果输入流中还有下一个标记,则返回 true;否则返回 false。
四、hasNextLine(): 检查下一行是否存在。如果输入流中还有下一行,则返回 true;否则返回 false。
因此,hasNext() 和 hasNextLine() 的主要区别在于它们检查的输入单元不同,前者检查标记,后者检查行。一般来说,如果需要逐个读取数字,可以使用 hasNext() 方法;如果需要逐行读取文本,可以使用 hasNextLine() 方法。
每组元素个数确定或者已知用in.hasNext();
每组元素个数不确定用逐行读取的in.hasNextLine();
例题1:多组求和(每行首数字是元素个数)
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
int num = sc.nextInt();
int sum = 0;
while(num-- > 0){
sum+= sc.nextInt();
}
System.out.println(sum);
}
}
}
例题2:多组求和(提前输入组数)
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
sc.nextLine(); //取出缓冲区中的空白符
while(sc.hasNext()) {
int a = sc.nextInt();
int b = sc.nextInt();
System.out.println(a+b);
}
}
}
例题3:多组求和
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
while(sc.hasNextLine()){
String[] str = sc.nextLine().split(" ");
int sum=0;
for(String s : str){
sum += Integer.parseInt(s);
}
System.out.println(sum);
}
}
}