Java Tutorial/File/Scanner
Содержание
- 1 Creating a Scanner: read from standard input: Scanner conin = new Scanner(System.in)
- 2 Creating a Scanner to read from a string
- 3 In general, to use Scanner, follow this procedure
- 4 Searching for the specified pattern within the next line of text
- 5 Setting Delimiters for Scanner
- 6 To find within the next count characters
- 7 To obtain the current delimiter pattern: Pattern delimiter( )
- 8 Using Scanner: the complement of Formatter
- 9 Using Scanner to read several different unknown types of data
- 10 Using Scanner to receive user input
Creating a Scanner: read from standard input: Scanner conin = new Scanner(System.in)
<source lang="java">
import java.util.Scanner; public class MainClass {
public static void main(String args[]) { Scanner conin = new Scanner(System.in); int count = 0; System.out.println("Enter numbers to average."); while (conin.hasNext()) { if (conin.hasNextDouble()) { System.out.println(conin.nextDouble()); count++; } if(count == 3){ System.exit(0); } } }
}</source>
Creating a Scanner to read from a string
<source lang="java">
import java.util.Scanner; public class MainClass {
public static void main(String args[]) { String instr = "10 99.88 scanning is easy."; Scanner conin = new Scanner(instr); while (conin.hasNext()) { if (conin.hasNextDouble()) { System.out.println(conin.nextDouble()); } } }
}</source>
10.0 99.88
In general, to use Scanner, follow this procedure
- Call one of Scanner"s hasNextXXX methods to see if the input is available
- If available, call Scanner"s nextXXX to read the input.
- Repeat first two steps.
<source lang="java">
Scanner conin = new Scanner(System.in); int i; // Read a list of integers. while(conin.hasNextInt()) {
i = conin.nextInt(); // ...
}</source>
Searching for the specified pattern within the next line of text
- String findInLine(Pattern pattern)
- String findInLine(String pattern)
If the pattern is found, the matching token is consumed and returned. Otherwise, null is returned.
<source lang="java">
import java.util.Scanner; public class MainClass {
public static void main(String args[]) { Scanner sc = new Scanner("Name: Tom Age: 28 ID: 77"); sc.findInLine("ID:"); if (sc.hasNext()) System.out.println(sc.next()); else System.out.println("Error!"); }
}</source>
77
Setting Delimiters for Scanner
Scanner defines where a token starts and ends based on a set of delimiters.
The default delimiters are the whitespace characters.
To Change the delimiters
- Scanner: useDelimiter(String pattern)
- Scanner: useDelimiter(Pattern pattern)
- Pattern is a regular expression that specifies the delimiter set.
Use Scanner to compute the average of a list of comma-separated values.
<source lang="java">
import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.util.Scanner; public class MainClass {
public static void main(String args[]) throws IOException { FileWriter fout = new FileWriter("test.txt"); fout.write("2, 3.4, 5,6, 7.4, 9.1, 10.5, done"); fout.close(); FileReader fin = new FileReader("Test.txt"); Scanner src = new Scanner(fin); // Set delimiters to space and comma. // ", *" tells Scanner to match a comma and zero or more spaces as // delimiters. src.useDelimiter(", *"); // Read and sum numbers. while (src.hasNext()) { if (src.hasNextDouble()) { System.out.println(src.nextDouble()); } else { break; } } fin.close(); }
}</source>
2.0 3.4 5.0 6.0 7.4 9.1 10.5
To find within the next count characters
- String findWithinHorizon(Pattern pattern, int count)
- String findWithinHorizon (String pattern, int count)
If successful, it returns the matching pattern. Otherwise, it returns null.
If count is zero, then all input is searched until either a match is found or the end of input is encountered.
<source lang="java">
import java.util.Scanner; public class MainClass {
public static void main(String args[]) { Scanner sc = new Scanner("Name: Tom Age: 28 ID: 77"); sc.findWithinHorizon("ID:",100); if (sc.hasNext()) System.out.println(sc.next()); else System.out.println("Error!"); }
}</source>
Name:
To obtain the current delimiter pattern: Pattern delimiter( )
<source lang="java">
import java.io.IOException; import java.util.Scanner; public class MainClass {
public static void main(String args[]) throws IOException { Scanner src = new Scanner("1,2,3,4"); src.useDelimiter(", *"); System.out.println(src.delimiter()); }
}</source>
, *
Using Scanner: the complement of Formatter
- It reads formatted input and converts the input into the binary form.
- Scanner can read input from the console, a file, a string, or any source that implements the Readable interface or ReadableByteChannel.
- Scanner is packaged in java.util.
The following sequence creates a Scanner that reads the file test.txt:
<source lang="java">
import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.util.Scanner; public class MainClass {
public static void main(String args[]) throws IOException { // Write output to a file. FileWriter fout = new FileWriter("test.txt"); fout.write("2 3.4 5 6 7.4 9.1 10.5 done"); fout.close(); FileReader fin = new FileReader("Test.txt"); Scanner src = new Scanner(fin); // Read and sum numbers. while (src.hasNext()) { if (src.hasNextDouble()) { System.out.println(src.nextDouble()); }else{ break; } } fin.close(); }
}</source>
2.0 3.4 5.0 6.0 7.4 9.1 10.5
Using Scanner to read several different unknown types of data
<source lang="java">
import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.util.Scanner; public class MainClass {
public static void main(String args[]) throws IOException { // Write output to a file. FileWriter fout = new FileWriter("test.txt"); fout.write("int: 1 double 1.0 boolean true"); fout.close(); FileReader fin = new FileReader("Test.txt"); Scanner src = new Scanner(fin); while (src.hasNext()) { if (src.hasNextInt()) { System.out.println("int: " + src.nextInt()); } else if (src.hasNextDouble()) { System.out.println("double: " + src.nextDouble()); } else if (src.hasNextBoolean()) { System.out.println("boolean: " + src.nextBoolean()); } else { System.out.println(src.next()); } } fin.close(); }
}</source>
int: int: 1 double double: 1.0 boolean boolean: true
Using Scanner to receive user input
<source lang="java">
import java.util.Scanner; public class MainClass{
public static void main(String[] args){ Scanner scanner = new Scanner (System.in); String s = scanner.next (); System.out.println(s); }
}</source>