การใช้ class java.util.Scanner ใน java 5.0 ตอนที่ 2
posted on 03 Dec 2004 12:02 by somkiatการใช้ 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 ที่หมายถึง
ก็ได้นะครับ ซึ่งดูได้ใน 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 เพิ่มเติมจากตอนนี้ครับ .....

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