API学习Scanner

来源:互联网 发布:apache转发至python 编辑:程序博客网 时间:2024/06/01 10:44
package com.wonders.api.date;import java.io.File;import java.io.FileNotFoundException;import java.util.Scanner;import java.util.regex.MatchResult;/** * JDK1.7 * Scanner * (1)一个简单的文本扫描器,可以使用正则表达式来解析原始类型和字符串. * (2)一个扫描器使用一个分隔符模式将其输入插入到令牌中,该模式默认匹配空格。由此产生的令牌可以使用不同的next方法转换为不同类型的值. * (3)扫描器使用的默认空白分隔符是由Character.iswhitespace识别的。reset()方法将重置扫描程序的分隔符的值到默认的空白分隔符,而不管它之前是否发生了更改. * (4)扫描操作可以阻塞等待输入. * (5)next()和hasNext()方法以及它们同基本数据类型的方法(比如nextInt()和hasNextInt()),首先会跳过任何匹配限定符模式的输入,接着尝试返回下一个指令.next和hashNext方法可能阻塞等待进一步的输入。 * (6)一个hasNext方法块是否与它关联的下一个方法是否会阻塞没有连接。    * (7) findInLine(java.lang.String)和findWithinHorizon(java.lang.String, int),skip(java.util.regex.Pattern) 三个方法是独立于分隔符模式操作. * (8)这些方法将尝试与指定的模式匹配,不考虑输入中的分隔符,因此可以在分隔符不相关的特殊情况下使用.这些方法可以阻塞等待更多的输入。 * (9)当扫描器抛出InputMismatchException异常时,扫描器将不会传递导致异常的令牌,这样它就可以通过其他方法检索或跳过。 * (10)依赖于分界符的模式类型,空的指令将会被返回。比如,模式"\\s+"会返回没有空令牌,因为它匹配分隔符的多个实例。这种分隔模式“\ \ s”可以返回空令牌,因为它一次只能传递一个空间。 * (11)扫描器可以读取任何实现 Readable接口的对象中的文本.如果调用底层可读的readable.read(java.nio.charbuffer)方法会抛出一个IOException,那么扫描器假设已经达到了输入的末端. * (12)通过IOException()方法可以检索底层可读的最新的IOException. * (13)当一个扫描器关闭时,如果源头实现了Closeable接口,它将关闭它的输入源. * (14)对于外部没有同步的多线程使用,Scanner不是线程安全的. * (15)除非特别提到,将一个null值传递到Scanner的任何方法中,都将会造成NullPointException异常的抛出. * (16)除非使用useRadix(int)方法设置不同的基数,否则扫描仪将默认将数字解释为小数。 * (17)不管它之前是否发生了更改,reset()方法将重置扫描仪的x值为10。 * (18) * (19) * (20) * @author liyongyong * */public class ScannerTest {    public static void main(String[] args) {        /**         * 例如,这个程序片段允许从System.in读取一个整形         */        System.out.println("请输入一个整数 : ");        Scanner scanner = new Scanner(System.in);        int num = scanner.nextInt();        System.out.println("输入的值是 : " + num);        /**         * 读取文件中的内容         */        //获取文件的绝对路径        //System.out.println(ScannerTest.class.getClassLoader().getResource("a.txt"));        try {            Scanner scanner2 = new Scanner(new File("E:\\MyEclipseProject\\JavaAPI\\bin\\a.txt"));            while(scanner2.hasNextLong()){                long along = scanner2.nextLong();                System.out.println(along);            }        } catch (FileNotFoundException e) {            e.printStackTrace();        }        /**         * 使用分隔符         */         String input = "1 fish 2 fish red fish blue fish";         Scanner s = new Scanner(input).useDelimiter("\\s*fish\\s*");         System.out.println(s.nextInt());         System.out.println(s.nextInt());         System.out.println(s.next());         System.out.println(s.next());         s.close();         /**          * 使用正则表达式          */         String input1 = "1 fish 2 fish red fish blue fish";         Scanner s1 = new Scanner(input1);         s1.findInLine("(\\d+) fish (\\d+) fish (\\w+) fish (\\w+)");         MatchResult result = s1.match();         for (int i=1; i<=result.groupCount(); i++)             System.out.println(result.group(i));         s1.close();         /**          * 从控制台读取一个字符串          */         System.out.println("请输入一个字符串 : ");         Scanner sc = new Scanner(System.in);         while(sc.hasNext()){             String str = sc.nextLine();             System.out.println("从控制台输入的字符串是 : "  + str);         }    }}

这里写图片描述

原创粉丝点击