วันจันทร์ที่ 17 กันยายน พ.ศ. 2550

สรุปการเรียนรู้กับ Java 8

String


เหมือนกับเป็นแค่ค่าตัวอักษรธรรมดานั้น
แต่มีลูกเล่นมากมายที่เกี่ยวกับ String ไม่ใช่แค่
System.out.print() เท่านั้นที่เป็นการใช้ String


การกำหนดให้ String เป็นตัวแปร


ประกาศง่ายๆโดย
String ชื่อตัวแปร = "ข้อความที่ต้องการ"
เช่น
String a = "Hello"

วิธีนำตัวแปรมาใช้ก็ใช้ System.out.print(ตัวแปร); ถ้าตามดังเงื่อนไขข้างบน
จะได้ว่า
System.out.print(a);

Result
Hello

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


การหาความยาวของ String นั้นๆ


ทำได้โดยต่อด้วย .length() เข้าไปท้ายข้อความหรือตัวแปร
เช่น

"hello".length();
หรือ
a.length();

ส่วนใหญ่จะใช้อยู่ในรูป System.out.print();

จะได้ค่าออกมาคือ 5


การหาตัวอักษรโดยใช้ตำแหน่ง


หลักการจะคล้ายๆกับ Array คือ 0 คือตัว แรก และ n-1 คือตัวสุดท้าย
ซึ่งใช้คำสั่ง .charAt(n-1) โดย n คือลำดับของตัวอักษรที่ต้องการรู้
เช่น

"hello".charAt(1);

จะได้ว่า ตัวที่สองของ hello คือ e


การหาตำแหน่งของตัวอักษรโดยใช้ตัวอักษร


โดยการหาตำแหน่งของตัวอักษรนี้ จะแสดงตำแหน่งที่ n-1 เหมือน.charAt(n)
แต่จะแสดงแค่ตัวที่อยู่หน้าสุด้ท่านั้น
โดยใช้คำสั่ง .indexOf('a') โดย a คือตัวอักษร
เช่น

"hello".indexOf('l');

จะแสดงเลข 2 ขึ้น คือ l ตัวแรกอยู่ตำแหน่งที่ 3 นั่นเอง
แต่หากหาไม่พบ โปรแกรมจะแสดงเลข -1 ออกมาแทน
เช่น

"hello".indexOf('L');

Result
-1

เพราะฉะนั้น หากไม่ต้องการให้เริ่มที่ตัวแรก ให้กำหนดตำแหน่งที่ต้องการเริ่มหาโดย
.indexOf('a',n-1)
เฃ่น

"hello".indexOf('l',3);

ผลลัพธ์ที่ออกมาจะได้เท่ากับ 3

หากไม่ต้องการหาจากหน้าไปหลัง
ยังมีวิธีที่สามารถหาจากหลังไปหน้าโดย
lastIndexOf('a') หรือ lastIndexOf('a',n-1)
เช่น

"hello".lastIndexOf('l');

จะได้ค่าเท่ากับ 3

ส่วนการตำแหน่งของกลุ่มข้อความ สามารถใช้ indexOf('abc') หรือ lastIndexOf('abc')
ได้เหมือนกัน
เช่น

"hello ell".indexOf('el');

Result

1

"hello ell".lastIndexOf('el');

Result

7

(การหานี้จะนับจากตัวแรกที่ใช่)


การเชื่อมต่อ String


โดยส่วนมากเราจำรู้เมื่ออยู่ในเครื่องหมาย + เช่น
a + b เป็นต้น
เมื่อแสดงออกมาจะได้ข้อความ a และ b
เช่น
String a = "hello";
String b = "ell";
System.out.println(a + b);

จะได้ว่า helloell เป็นต้น

และสามารถนำมาบวกกันแล้วค่อยแสดงก็ได้
เช่น

a = a + b;
System.out.println(a);

จะได้ helloell เหมือนกัน

และสามารถ + เข้าไปตรงๆ อีกได้เหมือนกัน
เช่น

a += b;
System.out.println(a);

Result

helloellเช่นกัน

*จากที่ผลออกมา จะสังเกตุได้ว่าค่า a ตอนเริ่มจะหายไปเป็นค่าตัวใหม่แทน
เพราะฉะนั้นถ้าต้องการคงค่าตัวแปรเดิม ควรใช้หลายตัวแปร

แต่ก็มีวิธีที่ทำให้ตัวแปรไม่หายไปโดยการใช้ .concat(x)
เช่น

System.out.println(a.concat(b));

จะได้ helloell เหมือนกัน โดนสามารถใช้ตัวแปร a ตัวเดิมได้ด้วย

หรือไม่ก็กำหนดตัวแปรใหม่โดยใช้ concat เหมือนกัน
เช่น

String d = a.concat(b);
System.out.println(d);

จะได้ข้อความ helloell เหมือนกันและได้ d เป็นตัวแปรเพิ่มขึ้นอีกตัวด้วย


การแสดงกลุ่มคำโดยใช้ตำแหน่ง


โดยกำหนดตัวเริ่มต้นแล้วใช้ฟังก์ชัน x.substring(n-1)เข้าช่วย
โดยการแสดงผล จะแสดงในรูปแบบ String ที่เป็นกลุ่มข้อความ
เช่น

String a = "Hello you. How are you to day?";
System.out.println(a.substring(11));

จะแสดง How are you today? ออกมา (ตำแหน่งที่ 12 ตรงกับ H พอดี)

แต่ถ้าต้องการกำหนดจุดสุดท้ายด้วย กำสามารถใส่,i ต่อท้ายได้โดย
i ต้องมีค่ามากกว่า n ตามสูตร x.substring(n,i)
เช่น

System.out.println(a.substring(11,22));

จะแสดง How are you ออกมา (ตำแหน่งที่ 23 คือตัวว่างเปล่า มันจะไม่แสดงจุดสุดท้ายออกมา)


การปรับแต่ง string


โดยการใช้คำสั่ง .replace('a','b') โดยตัวที่อยู่หน้า .replace สามารถเป็น
ตัวแปร หรือ ตัวอักษรก็ได้ ส่วน a คือตัวที่เลือกที่จะแทน และ b คือตัวที่ต้องการจะแทนลงไป
เช่น

"world".replace('o','i');

จะได้คำว่า wirld ออกมา เป็นต้น

*การใช้ replace นี้เป็นการเปลี่ยนทุกตัวที่สั่ง เช่นคำว่า hello
ถ้าต้องการเปลี่ยนตัว l เป็นตัว e จะได้คำว่า heeeo เป็นต้น

และการใช้คำสั่ง replace นี้สามารถเปี่ลยนแบบกลุ่มคำได้อีกด้วย
แต่ต้องแทนเครื่องหมาย '' เป็น ""
เช่น

"hello how are you? are you okay?".replace("you" , "we");

จะได้ hello how are we? are we okay? ออกมา

ส่วนการใช้ .replaceAll("","") เป็นการเน้นการเปลี่ยนกลุ่มคำโดยเฉพาะ ซึ่ง
ความสามารถที่แตกต่างจาก replace ธรรมดาคือไม่สามารถเปลี่ยนข้อมูล String
เป็น Char ได้
เช่น

"hello how are you? are you okay?".replaceAll("you" , "we");

จะได้ hello how are we? are we okay? ออกมา

*ข้อสังเกตุ ค่าของตัวแปรตัวที่ใช้ replace หรือ replaceAll ตัวแรกจะไม่เปลี่ยนแปลงถ้าไม่กำหนดค่าของตัวแปรนั้นๆใหม่

การตัดส่วนที่เกิดจำเป็นออก (trim)

เป็นการแปลง string ที่มีช่องว่างระหว่าง 1 ตัวขึ้นไปออกโดยวิธีการใช้
คือ a.trim()
เช่น

" hi ".trim()

จะได้ผลลัพท์คือ " hi " ออกมา

การเปลี่ยนตัวอักษรตัวพิมพ์ใหญ่ เล็ก

การเปลี่ยนตัวพิมพ์ใช้คำสั่ง .toLowerCase() (ได้ตัวพิมพ์เล็กทั้งหมด)
หรือ .toUpperCase (ได้ตัวพิมพ์ใหญ่ทั้งหมด)
เช่น

String a = "Hello how are You?";
System.out.println("a before change case : " + a);
String b = a.toLowerCase();
System.out.println("b : " + b);
String c = a.toUpperCase();
System.out.println("c : "+ c);

Result

a before change case : Hello how are You?
b : hello how are you?
c : HELLO HOW ARE YOU?

เป็นต้น


การเปรียบเทียบของ string


โดยการใช้คำสั่ง equals โดย ถ้ามีตัวใหญ่ต้องใหญ่เหมือนกัน และถ้าเล็กก็เล็กเหมือนกัน
โดยผลที่แสดงออกมาจะเป็น True กับ False
เช่น

String a = "Hello" ;
String b = a ;
String c = "hello" ;
a.equals(a) ;
a.equals(b) ;
a.equals(c) ;

จะได้ว่า a, b แสดงค่าเป็น true แต่ c แสดงค่าเป็น false เนื่องจาก H กับ h มีค่าต่างกัน

ในอีกทางหนึ่ง หากไม่ต้องการสนใจตัวอักษรใหญ่หรือเล็กนั้น
คำสั่ง equalsIgnoreCase เป็นตัวช่วย
เช่น

String a = "Hello" ;
String b = a ;
String c = "hello" ;
a.equalsIgnoreCase(a) ;
a.equalsIgnoreCase(b) ;
a.equalsIgnoreCase(c) ;

จะได้ว่า a,b และ c มีค่าเป็น true ทั้งหมด

การใช้คำสั่ง == ในการเปรียบเทียบนั้นค่าจะเท่ากันต่อเมื่อ
1. มีค่าเท่ากัน
2. ตัวแปรเดียวกันเท่านั้น

ซึ่งไม่เหมือนกับ equals ซึ่งเอาตัวแปรเท่าใหม่เท่ากับตัวแปรตัวเก่าได้
เช่น

String a = "Hello";
System.out.println("a == \"Hello\" is : " + (a == "Hello"));
String b = a;
System.out.println("b == a is : " + (b==a));
String c = new String(a);
System.out.println("c == a is : " + (c==a));

result

a == "Hello" is : true
b == a is : true
c == a is : false

ซึ่งสังเกตุได้ว่า ค่าตัวแปรใหม่ (c) จะมีค่าไม่เท่ากับตัวแปรเก่า (a) ในภาษาจาว่า

หลักการเปรียบเทียบด้วย compareTo นั้น การเปรียบเทียบจะเหมือนกับการเปรียบเทียบของ
equals ทุกประการ ต่างกันที่ผลที่แสดงออกมา โดย caompareTo จะแสดงค่าออกมาคือ -1, 0 , 1
โดยมากกว่าจะได้ 1 น้อยกว่าจะได้ -1 และเท่ากันได้ 0
ในขณะที่ equals แสดงค่าเป็น true , false
เช่น

String a = "Hello";
System.out.println("a.compareTo(\"Hello\") is : " + a.compareTo("Hello"));
String b = "Hello";
System.out.println("b.compareTo(a) is : " + b.compareTo(a));
String c = new String(a);
System.out.println("c.compareTo(a) is : " + c.compareTo(a));
String d = "a1" , e = "a2" ;
System.out.println("d.compareTo(e) is : " + d.compareTo(e));
System.out.println("e.compareTo(d) is : " + e.compareTo(d));

result

a.compareTo("Hello") is : 0
b.compareTo(a) is : 0
c.compareTo(a) is : 0
d.compareTo(e) is : -1
e.compareTo(d) is : 1




สามารถติดตามผลงานเพิ่มเติมได้ที่นี่

http://www.megaupload.com/?d=RF4JL4Y0