一、java.util.Scanner是Java5的新特征,主要功能是简化文本扫描。
使用Scanner类可以很方便地便获取用户的键盘输入,Scanner是一个基于正则表达式的文本扫描器,它可以从文件、输入流 、字符串中解析出基本类型值和字符串值。Scanner类提供了多个构造器,不同的构造器可接受文件、输入流、字符串作为数据,用于从文件、输入流、字符串中解析数据。
二、Scanner主要提供了两个方法来扫描输入:
(1) hasNextXxx():是否还有下一个输入项,其中Xxx可以是Int、Long等代表基本数据类型的字符串。如果需要判断是否包含下一个字符串,可以省略Xxx.
(2) nextXxx():获取下一个输入项。Xxx的含义与前一个方法中Xxx相同。
Scanner sc = new Scanner(System.in);
int i = sc.nextInt();
Scanner sc = new Scanner(new File("myNumbers"));
while (sc.hasNextLong()) {
long aLong = sc.nextLong();
}
三、事实上,Scanner提供了两个简单的方法来逐行读取:
(1) boolean hasNextLine():返回输入源中是否还有下一行。
(2)String nextLine():返回输入源中的下一行的字符串。
四、关于分割符
在默认情况下,Scanner使用空白(包括空格、Tab空白、回车)作为多个输入项之间的分隔符。
Scanner默认使用空格作为分割符来分隔文本,但允许你指定新的分隔符
public static void main(String[] args) throws FileNotFoundException {
Scanner s = new Scanner("123 asdf sd 45 789 sdf asdfl,sdf.sdfl,asdf ......asdfkl las");
//Scanner使用useDelimiter(String pattern)方法设置分隔符。下面设置使用回车作为分隔符,
//sc.useDelimiter("\n");
while (s.hasNext()) {
System.out.println(s.next());
}
}
结果:
123
asdf
sd
45
789
sdf
asdfl,sdf.sdfl,asdf
......asdfkl
las
五、next() 、nextLine()区别
1.next()一定要读取到有效字符后才可以结束输入,对输入有效字符之前遇到的空格键、Tab键或Enter键等结束符,next()方法会自动将其去掉,只有在输入有效字符之后,next()方法才将其后输入的空格键、Tab键或Enter键等视为分隔符或结束符。next方法不能得到带空格的字符串。
2. nextLine()方法的结束符只是Enter键,即nextLine()方法返回的是Enter键之前的所有字符,它是可以得到带空格的字符串的。
3. next()和nextLine(),这两个方法返回的都是String类型的。
package sort;
import java.util.Scanner;
public class Main{
public static void main(String[] args){
String str = null;
String str2;
Scanner in = new Scanner(System.in);
while(in.hasNext()){
str2 = in.next();
System.out.println("next:");
System.out.println(str2);
str = in.nextLine();
System.out.println("nextLine:");
System.out.println(str);
str = null;
}
in.close();
}
}
结果:
asd kjls
next:
asd
nextLine:
kjls
关于结束hasNext():
想要结束循环,在Windows环境下,需要输入Ctrl+Z;而在Unix环境下,需要输入Ctrl+D。注意,这是输入,而不是对控制台进行操作。这相当于向控制台输入一个字符,这个字符代表EOF,此时hasNext()方法返回false,循环结束。
例子:
public static void main(String[] args){
String str = null;
Scanner in = new Scanner(System.in);
System.out.println("请输入,按Enter键换行,按Ctrl+Z结束。");
while(in.hasNext()){
str = in.nextLine();
System.out.println(str);
str = null;
}
in.close();
}