Friday, June 04, 2004
讀檔剖析文字新利器:Scanner
其實是從下面這篇文章看到的:
Programming with the New Language Features in J2SE 1.5
覺得實在是蠻好用的
所以跟大家簡單介紹一下~
java.util.Scanner是Java1.5新加入的文字處理類別
它可以把讀入的字串轉成各種 primitive type 像是 int, long....等
也可以用 regular expression 來剖析讀入的字串
Programming with the New Language Features in J2SE 1.5
覺得實在是蠻好用的
所以跟大家簡單介紹一下~
java.util.Scanner是Java1.5新加入的文字處理類別
它可以把讀入的字串轉成各種 primitive type 像是 int, long....等
也可以用 regular expression 來剖析讀入的字串
API中有下列的範例:
- 從 console 讀入文字,並轉成 int (預設是以空白為分隔單位)
- 從檔案讀出 long
- 使用其他的分隔單位(delimiter)
- 或是使用 regular expression 剖析
Scanner sc = new Scanner(System.in); int i = sc.nextInt();
Scanner sc = new Scanner(new File("myNumbers")); while (sc.hasNextLong()) { long aLong = sc.nextLong(); }
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();輸出:
1 2 red blue
String input = "1 fish 2 fish red fish blue fish"; Scanner s = new Scanner(input); s.findInLine("(\\d+) fish (\\d+) fish (\\w+) fish (\\w+)"); MatchResult result = s.match(); for (int i=1; i<=result.groupCount(); i++) System.out.println(result.group(i); s.close();
其他我看到蠻有用的方法還有:
- findInLine 找尋一行中對應到傳入字串或樣式的文字
- next 回傳一個token
- nextXxx 回傳不同型態的token
- nextLine 像是BufferedReader中的readLine()
- skip 跳掉某些字串