这篇笔记其实是为了补充之前没做足的功课......
(1)Scanner的基本使用方法:
常用构造方法:
Scanner(File source) //构造一个新的Scanner,它生成的值是从指定文件扫描的
Scanner(InputStream source) //构造一个新的 Scanner,它生成的值是从指定的
输入流扫描的
Scanner(String source) //构造一个新的Scanner,它生成的值是从指定字符串
扫描的。
先介绍几个重要的成员方法:
int nextInt(); //将输入信息的下一个标记扫描为一个 int
double nextDouble(); //将输入信息的下一个标记扫描为一个double
...
String nextNext(); //查找并返回来自此扫描器的下一个完整标记(字符串)
String nextLine(); //此扫描器执行当前行,并返回跳过的输入信息
...
boolean hasNext(); //如果此扫描器的输入中有另一个标记,则返回true
boolean hasNext(Pattern pattern); //如果下一个完整标记与指定模式匹配,则
返回true
boolean hasNext(String pattern); //如果下一个标记与从指定字符串构造的模式
匹配,则返回true
boolean hasNextInt(); //如果通过使用nextInt()方法,此扫描器输入信息中的下
一个标记可以解释为指定基数中的一个int 值,则返回true。
...
-----
例1:
import java.io.*;
import java.util.*;
public class ScannerSample
{
public static void main(String args[]) throws Exception
{
ScannerSample.scan_stdin();
System.out.println();
ScannerSample.scan_file();
}
public static void scan_stdin() //从标准输入中扫描
{
Scanner sin = new Scanner(System.in);
int a;
long la;
double da;
String str = new String();
a = sin.nextInt();
la = sin.nextLong();
da = sin.nextDouble();
str = sin.next();
System.out.println(a);
System.out.println(la);
System.out.println(da);
System.out.println(str);
}
public static void scan_file() throws Exception //从文件中扫描
{
Scanner fin = new Scanner(new FileInputStream("in.txt"));
int a;
long la;
double da;
String str = new String();
a = fin.nextInt();
la = fin.nextLong();
da = fin.nextDouble();
str = fin.next();
System.out.println(a);
System.out.println(la);
System.out.println(da);
System.out.println(str);
}
}
------
例2:
import java.io.*;
import java.util.*;
class ScannerSample
{
public static void main(String args[]) throws Exception
{
ScannerSample.scan_hasnext();
}
public static void scan_hasnext() throws Exception
{
Scanner fin = new Scanner(new FileInputStream("in.txt"));
double sum=0.0;
while( fin.hasNext() )
{
if( fin.hasNextDouble() )
{
sum += fin.nextDouble();
}
else
{
if( fin.hasNext("end"))
{
break;
}
else
{
System.out.println("文件格式错!");
System.out.println("文件应该是任意多个连续数字后接字符串\"end\"的格式.");
break;
}
}
}
fin.close();
}
}
(2)设置分割符:
Scanner类对象在扫描过程中,默认以空格作为分割符来区分不同的token;我们也可以通过方法useDelimiter(Pattern pattern)来修改分割符。
相关方法:
Scanner useDelimiter(Pattern pattern); //将扫描器的分隔模式设置为指定模式
Scanner useDelimiter(String pattern); //将此扫描器的分隔模式设置为从指定
String构造的模式。
其中useDelimiter(String pattern)中的参数pattern是一个正规表达式。
如:fin.useDelimiter("abc");
fin.useDelimiter("##");
fin.useDelimiter(",,*");
例如:
import java.util.*;
class ScannerSample
{
public static void main(String args[]) throws Exception
{
Scanner sin = new Scanner(System.in);
sin.useDelimiter("aa*");//以正规表达式“aa*”所表示的字符串为分割符.
int a, b, c;
a = sin.nextInt();
b = sin.nextInt();
c = sin.nextInt();
System.out.println(a +"\t"+ b +"\t"+ c);
}
}
例如,在此程序中,
若键盘输入为:123aaa54344a23435aaaa
则输出为:123 54344 23435