由于在默认情况下Scanner根据空白字符对输入进行分词,为满足不同的分词要求,Scanner提供的使用正则表达式的方式去指定你所需的定界符:
1 package 字符串; 2 3 import java.io.BufferedReader; 4 import java.io.IOException; 5 import java.io.StringReader; 6 import java.util.Scanner; 7 8 /** 9 * 扫描输入与使用流读入对比 10 * 11 * Scanner默认以空白作为定界符 12 * @author admin 13 * 14 */ 15 public class Scan { 16 17 public static final String STR = "Sir Robin of Camelot 22 1.61803 0.897"; 18 19 public static void main(String[] args) { 20 //scan(); 21 22 23 delimiter(); 24 } 25 26 27 @SuppressWarnings("resource") 28 public static void scan() { 29 Scanner scanner = new Scanner(Scan.STR); 30 31 //nextLine()读取下一行的内容,并且指针向下移动一行 32 System.out.println(scanner.nextLine());//只认换行符,不认我直接换行 33 34 //nextInt()/nextDouble()指针不会在向下移动,而是水平移动。 35 System.out.println(scanner.nextInt()); 36 System.out.println(scanner.nextDouble()); 37 System.out.println(scanner.nextDouble()); 38 39 40 //当找不到本行内下一个值时会抛出异常。找不到下一行时也会抛出异常 41 //System.out.println(scanner.nextDouble()); 42 //System.out.println(scanner.nextLine()); 43 44 //Scanner有一个假设,在输入结束时会抛出IOException,所以Sanner会把IOExecption吞掉 45 System.out.println(scanner.ioException()); 46 } 47 48 49 /** 50 * Scanner默认以空白符作为定界符,你可以使用正则表达式去指定定界符 51 */ 52 public static void delimiter() { 53 Scanner sc = new Scanner("12,34,56,90"); 54 sc.useDelimiter("\s*,\s*"); 55 while(sc.hasNextInt()) { 56 System.out.println(sc.nextInt()); 57 } 58 } 59 60 }
控制台:
12 34 56 90