Scanner は、正規表現を使用してプリミティブ型と文字列を解析できる Java プログラミング言語のクラスです。Java のnextLine ()スキャナ メソッドは、このスキャナを現在の行を超えて移動し、スキップされた入力を返します。nextLine()とScannerについては、この記事で後ほど 詳しく説明します。
Scanner クラスとその仕組みについて簡単に説明します
大まかに言えば、java.util.Scannerクラスを使用すると、コンソールを含むさまざまなソースから入力を読み取ることができます。それは本当に古典的なスキャナーに似ています。このハードウェア デバイスのアーキテクチャは複雑ですが、その動作を説明するのは非常に簡単です。スキャナーは、ユーザーが紙などに付けた日付を読み取り、データを写真や PDF ファイルのようにメモリに保存します。Java スキャナーは、実際のスキャナーと同様に、指定したソースからデータを読み取ります。たとえば、文字列から、ファイルから、コンソールからなどです。次に、この情報を認識し、必要に応じて処理します。たとえば、プログラムはコンソールからデータの入力を要求し、それを読み取るか、ファイルからデータを読み取りたいとします。この操作のために、スキャナには「次」という単語と組み合わせたいくつかのメソッドがあります。next()、nextLine()、nextInt()、nextDouble()など。nextLine() メソッド
上で述べたように、スキャナのオブジェクトは区切り文字パターン (デフォルトでは空白) を使用して入力をトークンに分割しますが、文字列 ( java.lang.String ) または正規表現( java.util.regex .パターン)。結果のトークンは、さまざまな次のメソッドを使用してさまざまなタイプの値に変換できます。Java のスキャナー nextLine()メソッドは、このスキャナーを現在の行を超えて進め、スキップされた入力を返します。一般的なnext() は、このスキャナーから次の完全なトークンを検索して返します。 nextLine()メソッドは入力で行区切り文字を検索し続けるため、行区切り文字がない場合はスキップする行を探してすべての入力をバッファリングすることがあります。このメソッドは次の例外をスローします。- NoSuchElementException: 行が見つからなかった場合にスローされます。
- IllegalStateException: このスキャナが閉じている場合にスローされます
nextLine() の例
ユーザーにコンソールに任意の単語またはフレーズを入力してもらい、ユーザーが入力した単語またはフレーズを表示できるとします。import java.util.Scanner;
//…scanner.nextLine() example
public class ScannerTest {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("Enter any phrase and I'll repeat it!... ");
//here we are reading the next line:
String sentence = scan.nextLine();
System.out.println(sentence);
}
}
出力はたとえば次のようになります。
任意のフレーズを入力すると、それを繰り返します!... ここに私のフレーズがあります ここに私のフレーズがあります
nextLine()の代わりにnext()メソッド を使用すると、文の最初の単語だけが取得されます。
任意のフレーズを入力すると、それを繰り返します!...ここに私のフレーズがあります
ファイルから読み取る スキャナーのnextLine()メソッドの例を見てみましょう。この例では、txt ファイル myTest.txt を作成しました。このファイルには次の 2 行があります。
私のテストファイルと次の行はここにあります
これは、ファイルから 2 行を読み取るプログラムです。
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class ScannerTest {
public static void main(String[] args) throws FileNotFoundException {
Scanner scanner = new Scanner(new File("d://myTest.txt"));
String textFromFile1 = scanner.nextLine();
String textFromFile2 = scanner.nextLine();
System.out.println(textFromFile1);
System.out.println(textFromFile2);
scanner.close();
}
}
出力は次のとおりです。
私のテストファイルと次の行はここにあります
ファイルへのパスが間違っているか、そのような名前のファイルが存在しない場合は、次の出力が表示されます。
スレッド「メイン」java.io.FileNotFoundException での例外: d:\myTest.txt java.base/java.io.FileInputStream.open0(Native Method) at java.base/java.io.FileInputStream.open(FileInputStream.java :213) java.base/java.io.FileInputStream.<init>(FileInputStream.java:155) で java.base/java.util.Scanner.<init>(Scanner.java:639) で ScannerTest.main( ScannerTest.java:8)
プログラムがファイルを見つけても、それが空の場合は、NoSuchElementException が発生します。
スレッド「メイン」java.util.NoSuchElementException での例外: ScannerTest.main(ScannerTest.java:10) の java.base/java.util.Scanner.nextLine(Scanner.java:1651) に行が見つかりませんでした。