การใช้ class java.util.Scanner ใน java 5.0 ตอนที่ 2

ครั้งนี้จะเป็นตัวอย่างในการใช้ delimeter ในการอ่านข้อมูลโดยใช้ Scanner

โดยเราสามารถกำหนด delimeter เข้าไปใน Scanner ได้โดย method useDelimeter(String reg)

ตัวอย่างที่ 1

private static void readFile(String fileName) {
try {
Scanner scanner = new Scanner(new File(fileName));
scanner.useDelimiter
(System.getProperty("line.separator"));
while (scanner.hasNext()) {
System.out.println(scanner.next());
}
scanner.close();
} catch (Exception e) {
e.printStackTrace();
}
}

เป็นตัวอย่างของการอ่านข้อมูลไปจนกว่าจะจบบรรทัดนั้นๆ ครับ หรออาจจะกำหนด delimeter ใหม่เป็น

scanner.useDelimiter("\r\n|\n");

ก็ได้นะครับ ซึ่ง paatern ของ java regular expression นั้นสามารถดูใน javadoc ได้ครับ

ต่อไปเป็นตัวอย่างของการอ่านข้อมูลจาก webpage ครับ

import java.net.URL;
   import java.net.URLConnection;
   import java.io.IOException;
   import java.util.Scanner;

   public class WebPageScanner {
     public static void main(String[] args) {
       try {
         URLConnection connection =
           new URL("http://java.net").openConnection();
         String text = new Scanner(
           connection.getInputStream()).
           useDelimiter("\\Z").next();
       } catch (IOException e) {
         e.printStackTrace();
       }
     }
   }

จาก code นี้จะสังเกตุเห็นว่า userDelimeter(\\Z); นั้นเป็น regular expression ที่หมายถึง

\Z The end of the input but for the final terminator, ifany หรืออาจจะเปลี่ยนเป็น

\A The beginning of the input

ก็ได้นะครับ ซึ่งดูได้ใน javadoc ครับ

และที่สำคัญตัวอย่างนี้จะเห็นว่าจะสรางตัว scanner จาก inputsteam ซึ่งเราเขียน code เพียงบรรทัดเดียวเท่านั้นซึ่งตรงนี้แหละครับเป็นข้อดีมากๆ เนื่องจากถ้าเราทำใน java version ก่อนหน้านี้เราจะต้องเขียน code ดังนี้ครับ

InputStream source = new URL("http://pat.net/misc/foo.txt").openStream();
BufferedReader br = new BufferedReader( new InputStreamReader( source ) );
StringBuffer text = new StringBuffer();
for ( String line; (line = br.readLine()) ! = null )
    text.append( line );

ซึ่งจะเห็นได้ว่าสั้นและง่ายขึ้นมากจริงๆ ครับ

ดังนั้นผมลองเอามาใช้แทนในตัวอย่างแรกเลยครับ จะเป็นอย่างไรครับ

String text = new Scanner( new File("testdata.txt") ).useDelimiter("\\Z").next();
System.out.println(text);

จะเห็นได้ว่า Scanner นี้ทำให้ชีวิตเราง่ายขึ้นเยอะครับ แต่ก็ต้องลองใช้กันดูอีกครับ เผื่อว่าใครจะมี idea ในการใช้งานที่ดีกว่านี้อีกครับ

ตอนต่อไปของเรื่อง Scanner กับ regular expression เพิ่มเติมจากตอนนี้ครับ .....

Comment



smilebig smileopen-mounthed smileconfused smilesad smileangry smiletonguequestionembarrassedsurprised smilewinkdouble winkcry

Tweet

#1 By (203.147.15.2 /unknown) on 2005-06-03 12:00

#2 By (203.147.15.2 /unknown) on 2005-06-03 12:01

ดูดีครับ

#3 By (158.108.132.142) on 2006-10-10 12:24

ควาย

#4 By (203.158.177.3 /172.16.3.13) on 2007-04-25 16:26

#5 By (203.113.17.150) on 2007-06-19 07:43

thk kabig smile

#6 By kiku_daow (58.181.216.189) on 2009-06-30 09:56

sad smile

#7 By (58.137.15.212) on 2009-12-03 17:44