ตัวอย่างการใช้งาน Java String
ว่าด้วยเรื่อง String ในภาษา Java กันครับ String เป็นคลาสในภาษา Java ซึ่งมีความจำเป็นและใช้งานบ่อยครั้งมาก วันนี้ก็เลยอยากจะมานำเสนอ การใช้งาน method ในคลาส String รวมถึงยกเอาตัวอย่าง ที่ใช้งานบ่อยๆมาแชร์ด้วย
หลักการใช้ String
การประกาศ String ข้อความจะต้องอยู่ภายใน Double Quote ("") เช่น
String mySite = "devahoy";
มีค่าเท่ากับ
char data[] = {'d', 'e', 'v', 's', 'h', 'a', 'r', 'i', 'n', 'g'};
String mySite = new String(data);
หรือ
String mySite = new String("devahoy");
ตรวจสอบความยาว String
เราสามารถตรวจสอบความยาว String ได้ด้วย method length()
int lengthOfWord = mySite.length();
ทดสอบว่า String นั้นๆ มีความยาวเป็น 0 หรือไม่
boolean empty = mySite.isEmpty();
String ยังสามารถรวมข้อความหลายๆข้อความเป็น 1 String ได้ด้วยตัว Operator + (เครื่องหมาย +) เช่น
String myWords = "Hello" + "Wolrd";
ผลลัพธ์คือ
HelloWorld
คำถามที่พบบ่อย
String + String หรือ String.concat()
String word1 = "Hello " + "World";
String word2 = "Hello ".concat("World");
จริงๆ ทั้งสองอย่าง ก็ใช้งานได้ และผลลัพธ์ก็ไม่แตกต่างกันมากนัก แต่ส่วนใหญ่จะนิยมใช้แบบแรกกันมากกว่า ทั้งการใช้งานง่าย และดูเรียบง่ายกว่า ข้อดีอีกอย่างของการใช้ + ก็คือ สามารถใช้ร่วมกับ int, char หรือ float ก็ได้ โดยจะแปลงเป็น String ให้เองอัตโนมัติ เพราะเมื่อ JVM ทำงาน
จาก
String word1 = "Hello " + "Wolrd";
มันก็จะทำงานเป็น
String word1 = new StringBuilder().append("Hello ").append("World").toString();
ส่วน concat() ทุกครั้งที่เรียกใช้งาน จะมีค่าเท่ากับเราประกาศ
String a = new String("result");
ปัญหา concat() จะเกิดก็ต่อเมื่อ เราใช้ string เป็น null แล้วไปทำการ concat() จะเกิด NullPointerException ได้
เปรียบเทียบ String ใช้ == หรือ equals()
จะเปรียบเทียบค่าใน String ให้ใช้ equals() เนื่องจาก มันจะทำการเปรียบเทียบทั้งค่าใน String และตัว object ต่างจาก == ที่ใช้เปรียบเทียบตัวเลข ส่วนใน String จะทำการเปรียบเทียบตำแหน่งที่อยู่ของ String นั้นๆ
มาดูตัวอย่างกัน ถ้าหากสร้าง String มา 2 ตัว โดยข้อความใน String เหมือนกัน ใน จาวา จะใช้ตำแหน่งในการเก็บข้อความตำแหน่งเดียวกัน ฉะนั้น ถ้าใช้ == หรือ equals() ก็จะเป็นtrue ทั้งคู่
String misterA = "I'm String";
String misterB = "I'm String";
String misterC = new String("I'm String");
จะ เปรียบเทียบด้วย
boolean name = misterA == misterB;
หรือ
boolean name = misterA.equals(misterB);
ผลลัพธ์ก็จะได้เป็น
true
แล้วถ้าเราเพิ่มนาย misterC มาอีกคนละ โดยสร้าง string ด้วยการ new String()
String misterA = "I'm String";
String misterB = "I'm String";
String misterC = new String("I'm String");
เปรียบเทียบ misterA กับ misterC ด้วย equals()
boolean name = misterA.equals(misterC);
ผลลัพธืเป็น true
true
คราวนี้เปรียบเทียบ misterA กับ misterC ด้วย == บ้าง
boolean name = misterA == misterC;
อ้าว ผลลัพธ์เป็น false ซะงั้น ทั้งๆที่ข้อความเหมือนกัน
false
ฉะนั้น ใช้ String.equals ดีกว่านะครับ ^^
equals() กับ contentEquals() ต่างกันอย่างไร
ต่างกันที่ parameters ที่รับ
- contentEquals() รับ Charsequence
- equals() รับ String
ต่างกันที่ contentEquals() จะเช็คโดยเปรียบเทียบตัวอักษร char หรือ StringBuffer ส่วน equals() จะเช็ค String รวมถึง object ที่ instance มาจาก String ด้วย
ข้างล่างนี้คือรายชื่อตัวอย่าง method ในคลาส String ครับ อธิบายความหมาย และวิธีการใช้งาน รวมถึงตัวอย่างการใช้งานด้วย
ตัวอย่าง Method ในคลาส String
charAt()
- Method : charAt(int index)
- Returns : char
ใช้ดึงตัวอักษร 1 ตัว ตามตำแหน่งที่ระบุ โดยตำแหน่งของ String ตัวแรก เริ่มต้นที่ index 0
Example
String word = "Hello";
char character = word.charAt(1);
H
codePointAt
- Method : codePointAt(int index)
- Returns : int
คล้ายๆกับ method charAt เพียงแต่รีเทรินค่ากลับมาเป็น integer รหัส unicode ของตัวอักษรแทน
Example
String word = "Hello";
int code = word.codePointAt(1);
101
codePointBefore
- Method : codePointBefore(int index)
- Returns : int
คล้ายๆกับ method codePointAt ต่างกันที่ codePointBefore จะหาค่า unicode จากอักษระก่อนหน้า
โดยสามารถหา ตำแหน่งได้ตั้งแต่ index 1 ขึ้นไป จนถึง length ของมัน
codePointBefore ไม่สามารถใช้ index 0 ได้นะครับ
Example
String word = "Hello";
int code = word.codePointBefore(1);
มีค่าเท่ากับ
int code = word.codePointAt(0);
72
codePointCount
Method : codePointCount(int start, int end)
Returns : int
ใช้สำหรับหาจำนวนตัวอักษรแบบ unicode หรือก็คือจำนวน char นั่นเอง โดยรับ parameters 2 ตัวคือ ตัวแรกตำแหน่งเริ่มต้น และอีกตัวคือ ตำแหน่งสุดท้ายที่ต้องการหา
ระวัง ตำแหน่งสุดท้ายที่ต้องการหา index ต้องไม่เกิน length - 1
Example
String word = "Hello";
int character = word.codePointCount(0, 3);
3
compareTo
- Method : compareTo(String someWord)
- Returns : int
ใช้เปรียบเทียบข้อความว่าต่างกันหรือไม่ โดยอิงจากค่า Unicode เช่น การเปรียบเทียบคำศัพท์ พวกพจนานุกรม เป็นต้น
หาก return < 0 แสดงว่า เรียงตามพจนานุกรม หาก return > 0 แสดงว่า ไม่เรียงตามพจนานุกรม หาก return == 0 แสดงว่าข้อความเหมือนกัน
compareTo() จะ return 0 หากข้อความเหมือนกัน ส่วน compare() จะ return true
Example
String word1 = "Hello";
String word2 = "World";
int diff = word1.compareTo(word2);
-15
แสดงว่า Hello อยู่ก่อนคำว่า World 15 ลำดับ (H ห่างจาก W 15 อันดับ)
A ตัวพิมพ์ใหญ่ และ a ตัวพิมพ์เล็ก ค่าไม่เหมือนกัน โดย A จะมาก่อน a
compareToIgnoreCase
Method : compareToIgnoreCase(String someWord)
Returns : int
เปรียบเทียบคำศัพท์ เช่นเดียวกับ compreTo ต่างกันที่ จะไม่สนใจ ตัวพิมพ์เล็กตัวพิมพ์ใหญ่
"a".compareTo("A"); จะได้ 32 ส่วน "a".compareToIgnore("A") จะได้ 0
Example
String word1 = "hEllO";
String word2 = "HeLLo";
int diff = word1.compareToIgnore(word2);
0
concat()
- Method : concat(String word)
- Returns : String
ใช้สำหรับเชื่อมต่อข้อความเข้าด้วยกัน สำหรับต่อเติมข้อความ2 ข้อความ เช่น "สวัส" กับ "ดี"
Example
String word1 = "Hello";
String word2 = "World";
String newWord = word1.concat(word2);
HelloWorld
"Hello ".concat("World"); มีค่าเท่ากับ "Hello " + "World";
ผลลัพธ์เหมือนกัน แต่ perfomance อาจแตกต่างกันนิดหน่อย โดย "Hello " + "World" จะแปลงเป็น StringBuilder แล้ว append String
contains()
Method : contains(CharSequence char)
Returns : boolean
ใช้สำหรับตรวจสอบว่ามีตัวอักษรในข้อความหรือไม่ ตัวอย่าง เช่น ต้องการหาว่า มีตัว "a" ใน String "Hello" หรือไม่ ถ้า มี จะเป็น true ถ้าไม่มีจะเป็น false
Example
String word1 = "Hello";
String word2 = "a";
boolean b = word1.contains(word2);
false
contentEquals()
Method : contentEquals(CharSequence chars), contentEquals(StringBuffer buffer)
Returns : boolean
ใช้สำหรับเปรียบเทียบ ข้อความ 2 ข้อความ ว่าเหมือนกันหรือไม่ โดยอิงจาก char
Example
String word1 = "Hello";
String word2 = "Hello";
boolean b = word1.contentEquals(word2);
//หรือ boolean b = word1.contentEquals(new StringBuffer("Hello"));
true
endsWith()
Method : endsWith(String word)
Returns : boolean
ใช้ตรวจสอบว่าข้อความนั้นลงท้ายด้วยตัวอักษรที่ต้องการหรือไม่
เช่น ต้องการตรวจสอบ ว่า "a" เป็นตัวอักษรตัวสุดท้ายของข้อความ "Hello" หรือไม่ ถ้าเป็น ก็จะ return true ถ้าไม่เป็น จะ return false
Example
String word = "Hello";
boolean lastChar = word.endsWith("a");
false
equals()
Method : equals(Object anObject)
Returns : boolean
ใช้เปรียบเทียบ ข้อความสองข้อความ ว่าเหมือนกันหรือไม่ หากเหมือนกัน จะ return true หากต่างกัน จะ return false
Example
String word = "Hello";
boolean same = word.equals("Hello");
true
equalsIgnoreCase()
Method : equalsIgnoreCase(Object anObject)
Returns : boolean
ใช้เปรียบเทียบ ข้อความสองข้อความ ว่าเหมือนกันหรือไม่ โดยไม่สนใจว่าจะเป็นตัวพิมพ์เล็ก หรือว่าตัวพิมพ์ใหญ่ หากเหมือนกัน จะ return true หากต่างกัน จะ return false
Example
String word = "Hello";
boolean same = word.equals("HELLO");
true
indexOf()
indexOf(int ch)
returns : int
ใช้สำหรับหาตำแหน่งของตัวอักษรที่เราต้องการ ว่าอยู่ตำแหน่งใดในข้อความ หากไม่เจอ จะ return เป็น -1 เช่น ใช้หา ตัวอักษร "e" ของคำว่า "Hello"
String word = "Hello";
int index = word.indexOf('e');
1
indexOf(int ch, int fromIndex)
return : int
เมธอดนี้จะรับ parameters 2 ค่าคือ ตัวอักษรที่ต้องการหา กับตำแหน่งที่เริ่มการค้นหา
เช่นเดิม จะหาตัวอักษร "e" โดยเริ่มจากตำแหน่งที่ index 2 ฉะนั้นจะหาไม่เจอ
String word = "Hello";
int index = word.indexOf('e', 2);
-1
indexOf(String str)
return : int
เมธอดนี้จะรับ parameter เป็น string คือ ตัวอักษรหรือข้อความที่ต้องการค้นหา
String word = "Hello";
int index = word.indexOf("lo");
3
indexOf(String str, int fromIndex)
return : int
เมธอดนี้จะรับ parameter 2 ตัว คือstring คือ ตัวอักษรหรือข้อความที่ต้องการค้นหา และตำแหน่งที่จะเริ่มการค้นหา
String word = "Hello";
int index = word.indexOf("lo", 2);
3
isEmpty()
- Method : isEmpty()
- Returns : boolean
ใช้ตรวจสอบว่าข้อความ String นั้น มีความยาวเป็น 0 หรือไม่ หากเป็น 0 จะ return true
ระวัง ถ้า String ที่ใช้ isEmpty() เป็น null จะเกิด NullPointerException
Example
String word = "";
boolean empty = word.isEmpty();
true
lastIndexOf()
lastIndexOf(int ch)
return : int
ใช้สำหรับหาตำแหน่งของตัวอักษรตำแหน่งสุดท้ายที่เราต้องการ ว่าอยู่ตำแหน่งใดในข้อความ หากไม่เจอ จะ return เป็น -1 เช่น ใช้หา ตัวอักษร "l" ของคำว่า "Hello" จะได้ตำแหน่ง ของ "l" ตัวที่สอง เนื่องจากเป็นตัวสุดท้าย
String word = "Hello";
int index = word.lastIndexOf('l');
3
lastIndexOf(int ch, int fromIndex)
return : int
เมธอดนี้จะรับ parameters 2 ค่าคือ ตัวอักษรตำแหน่งสุดท้ายที่ต้องการหา กับตำแหน่งที่เริ่มการค้นหา หากไม่เจอจะ return -1
เช่นเดิม จะหาตัวอักษร "l" โดยเริ่มจากตำแหน่งที่ index 1 คือ จะหาแค่ ตัวอักษร "l" ในคำว่า "He" ฉะนั้นจะหาไม่เจอ
จริงๆ มันไว้หาตัวอักษรสุดท้าย แต่วิธีการหาของมันคือจะเริ่มหา จากตำแหน่ง fromIndex กลับหลังไปหน้า โดยเจอตัวแรก ที่หา ก็จะเป็น lastIndexOf()
String word = "Hello";
int index = word.lastIndexOf('l', 1);
-1
lastIndexOf(String str)
return : int
เมธอดนี้จะรับ parameter เป็น string คือ ตัวอักษรหรือข้อความในตำแหน่งสุดท้ายที่ต้องการค้นหา หากไม่เจอ จะ return -1
String word = "Hello";
int index = word.lastIndexOf("lo");
3
lastIndexOf(String str, int fromIndex)
return : int
เมธอดนี้จะรับ parameter 2 ตัว คือstring คือ ตัวอักษรหรือข้อความที่ต้องการค้นหา และตำแหน่งที่จะเริ่มการค้นหา เช่น เริ่มทำการหา "lo" ใน "Hell" ไม่มี "o" เนื่องจาก fromIndex = 3 โดยเริ่มค้นหา จากหลังมาหน้า หากพบคำๆนั้น ก็จะส่งตำแหน่งออกมา หากไม่เจอ จะ return -1
String word = "Hello";
int index = word.indexOf("lo", 3);
3
length()
- Method : length()
- Returns : int
ใช้หาความยาวของข้อความ
Example
String word = "Hello";
int length = word.length();
5
replace()
- replace(char oldChar, char newChar)
return: String
ใช้เปลี่ยนตัวอักษร โดยเปลี่ยนตัวอักษรตัวเก่า เป็นอักษรตัวใหม่ที่ต้องการ
เช่น ต้องการเปลี่ยน 'o' เป็น 'a' ใน "Hello"
Example
String word = "Hello";
String newWord = word.replace('o', 'a');
Hella
- replace(CharSequence target, CharSequence replacement)
return: String
ใช้เปลี่ยนตัวอักษร หรือข้อความใหม สามารถเปลี่ยนแค่ตัวอักษรเดียว หรือเปลี่ยนทั้งคำได้ เช่น ต้องการเปลี่ยนคำว่า "World" ไปเป็น "Java"
ระวัง เครื่องหมาย ' และ " ด้วยนะครับต่างกันมาก
String word = "Hello World";
String newWord = word.replace("World", "Java");
Hello Java
split()
Method : split(String regex)
Returns : String[]
ใช้แบ่งคำตัวอักษร ด้วย Regex ให้อยู่ในรูปแบบ array เช่น "J,A,V,A" เราจะแบ่งคำไปเป็น array ด้วยตัว "," ทุกครั้งที่มันเจอ "," มันก็จะทำการตัดคำทั้งหมดก่อนเจอ "," ไปไว้ใน array แล้วก็หาตัวต่อไป ถ้าเจออีก ก็จะตัดคำไปใส่ array อีกซึ่ง array จะมีค่าดังนี้ {"J", "A", "V", "A"}
Example
String[] name = "Hello,World".split(",");
for(int i = 0; i < name.length; i++) {
System.out.println(name[i]);
}
Hello
World
###substring()
- substring(int index)
return: String
ใช้เพื่อต้องการตัดคำบางส่วนออกมาจาก String โดย index คือตำแหน่งที่จะเริ่มทำการตัด
เช่น คำว่า "Devahoy"
D e v a h o y
[0][1][2][3][4][5][6]
index จะเริ่มตั้งแต่ 0 ไปจนถึง length - 1 ทีนี้ถ้าต้องการตัดให้เหลือแค่ "ahoy" ก็คือเริ่มตัดตั้งแต่ตำแหน่งที่ 3 ก็จะได้ประมาณนี้
Example
String word = "Devahoy".substring(3);
ahoy
- substring(int indexBegin, int indexEnd)
return: String
ใช้เพื่อตัดคำบางส่วนออกมาจาก String โดยอ้างอิงจาก index เริ่มต้นและสิ้นสุด เช่น คำว่า "Devahoy"
D e v a h o y
[0][1][2][3][4][5][6]
ถ้าหากผมจะทำการตัดให้เหลือแค่คำว่า "aho" จะต้องเริ่มตัดที่ตำแหน่งเท่าไหร่ และสิ้นสุดที่ตำแหน่งเท่าไหร่? a อยู่ตำแหน่ง 3 h อยู่ตำแหน่ง 5 ฉะนั้นตัดตั้งแต่ 3-5 ใช่ไหม? ผิดครับ ถ้าหากเริ่มตัดตั้งแต่ index = 3 ถึง index = 5 ก็จะได้แค่ "ah" เนื่องจาก substring จะเริ่มนับตั้งแต่ indexBegin เริ่มต้น จนเมื่อเจอ indexEnd เมื่อไหร่ ก็จะตัดคำหลัง indexEnd ทิ้งหมด รวมถึง indexEnd ด้วย ฉะนั้น ถ้าจะให้เหลือ "aho" ต้อง เริ่มที่ 3 และสิ้นสุดที่ 6 ครับ
Example
String word = "Devahoy".substring(3, 6);
aho
toLowerCase()
- Method : toLowerCase()
- Returns : String
เมธอดนี้ไม่มีอะไรมาก แค่ไว้สำหรับแปลง String เป็นตัวพิมพ์เล็ก
Example
String word = "Devahoy".toLowerCase();
devahoy
toUpperCase()
Method : toUpperCase()
Returns : String
เมธอดนี้ไม่มีอะไรมาก แค่ไว้สำหรับแปลง String เป็นตัวพิมพ์ใหญ่
Example
String word = "Devahoy".toUpperCase();
DEVAHOY
###trim()
Method : trim()
Returns : String
ไว้ใช้ตัดช่องว่างต่างๆด้านหน้าและด้านหลังของข้อความทิ้งไป เช่น " Hello Word "
มีทั้งช่องว่างด้านและด้านหลังเลย เมื่อใช้ trim มันก็จะทำการตัดช่องว่างก่อน Hello และช่องว่างหลัง World ทิ้ง โดยช่องว่างระหว่างคำ จะไม่มีผลนะครับ ผลลัพธ์ก็จะได้ดังนี้
Example
String word = "Hello World".trim();
Hello World
References
- Authors
- Name
- Chai Phonbopit
- Website
- @Phonbopit