スキャンフロー——Scanner類
2587 ワード
BufferedReaderクラスは、大きなテキストデータファイルの読み込み操作に便利ですが、2つの問題があります。データを読み出す時は、文字列によってのみ戻ります。public String readline()throws IOException。 セパレータは固定されていて、改行でセパレータとして使用されます。 そこで、Scannerクラスがすべての入力ストリームの操作問題を解決します。
Scannerの構造方法(そのうち2つ):
Scannerはデフォルトでは、空白(改行とスペース)を区切り記号として使用します。任意でセパレータを設定できます。
まず私のeディスクの下にハロー.txtファイルを準備します。内容は以下の通りです。
締め括りをつける
Scanner類でデータを読み取るのは前のBufferedereaderより便利です。だから今後はScannerを使ってできるだけScannerで読み取ります。
Scanner類はInputStream類の完備で、BufferediaderはReader類の完備で、PrintStreamはOutputStreamの完備で、PrintWriterはWriterの完備です。
Scannerの構造方法(そのうち2つ):
public Scanner(File source) throws FileNotFoundException
public Scanner(InputStream source)
ちょっとPrintStreamのような構造方法のデザインですか?Scannerはデフォルトでは、空白(改行とスペース)を区切り記号として使用します。任意でセパレータを設定できます。
public Scanner useDelimiter(String pattern)
一般的な方法関数:public boolean hasNext()
public String next()
public boolean hasNextXxx()
public xxx nextXxx()
public boolean hasNext(String pattern)
public String next(String pattern)
例1:キーボード入力ストリームからデータを読み出すpublic class Main {
public static void main(String[] args) throws IOException {
Scanner scanner=new Scanner(System.in);
while (true){
if (scanner.hasNextInt()){
System.out.println(" :"+scanner.nextInt());
}else if(scanner.hasNextDouble()){
System.out.println(" :"+scanner.nextDouble());
}else if(scanner.hasNext("\\w{3}")){
System.out.println(" :"+scanner.next("\\w{3}"));
}else {
System.out.println(" :"+scanner.next());
}
}
}
}
実行結果:6-9 687wr o7.8 uuu p 98.5 4
:6-9
:687wr
:o7.8
:uuu
:p
:98.5
:4
例2:ファイルからデータを読み出すまず私のeディスクの下にハロー.txtファイルを準備します。内容は以下の通りです。
hello world
1.4 4
javaファイル: import java.io.*;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner= null;
try {
scanner = new Scanner(new File("e:"+File.separator+"hello.txt"));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
scanner.useDelimiter("
");
while (scanner.hasNext())
System.out.println(scanner.next());
}
}
実行結果:hello world
1.4 4
最初はnew Scannerの構造関数でいつもファイルの内容を読み取れませんでしたが、new Scanner(FileInput Stream in)でScannerオブジェクトを実装すれば読めます。その後、元々はファイルに中国語があるからです。そして、utf-8として保存しておけば、読めます。締め括りをつける
Scanner類でデータを読み取るのは前のBufferedereaderより便利です。だから今後はScannerを使ってできるだけScannerで読み取ります。
Scanner類はInputStream類の完備で、BufferediaderはReader類の完備で、PrintStreamはOutputStreamの完備で、PrintWriterはWriterの完備です。