ตัวอย่างการใช้งาน Java String

Published on
Java
Discord

ว่าด้วยเรื่อง 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

Buy Me A Coffee
Authors
Discord