Tutorial

Java 101 - String & StringBuffer & StringBuilder (EP.5)

By Arnon Puitrakul - 25 ธันวาคม 2014

Java 101 - String &  StringBuffer & StringBuilder (EP.5)

เมื่อวานเราได้เรียนเรื่องของอะไรว่ะ ลืม... เดียวนะอ่อ Array กับ ArrayList ไปแล้ว วันนี้มาเปลี่ยนอารมณ์กันบ้าง (ตรงไหนว่ะ!!) วันนี้เราจะมาเรียนรู้ในเรื่องของ String กัน
String หรือในภาษาไทยอันสวยเก๊ว่า "สายอัขระ" สวยป่ะล่ะ สรุปสั้นเลยว่า String มันก็คือชุดของตัวอักษรนั้นแหละ แต่มันจะต่างจากภาษา C อยู่ จากในภาษา C String มันคือ Array ของ Char แต่ใน Java เราพัฒนาแล้วจร้า มันถูกบัญญัติลงไปเป็น Datatype แบบนึงเลยล่ะแกร์!! เจ๋งเวอร์!! ถามว่า แล้วเราจะประกาศมันยังไงล่ะ? ไม่ยาก
ถ้าเราจำเรื่องของการสร้าง Object ได้ (String 1 อันเราจะมองว่ามันเป็น Object ชิ้นหนึ่งเหมือนกัน)

String a = new String();

ก็ได้ หรือ เอาที่ง่ายกว่านั้นคือ

String a;

จบง่ายมั้ยล่าาา
การให้ค่ามันก็ไม่ยุ่งยากเหมือนใน C เพียงแค่บอกว่า (สมมุติผมประกาศ String a; ไปแล้วนะ)

a = “Hello World”;

ได้เลย ก็ยังไม่ยากอยู่ดี ทีนี้เมื่อตอนแรกผมบอกว่า String มันก็คือ Object ตัวนึงใช่ม่ะ
แปลว่ามันจะต้องมี Method ด้วยเหมือนกัน เรามาดู Method กันดีกว่า

  • equals() - ไว้ใช้ Compare String ถามแค่ว่า เท่าหรือไม่เท่า Return กลับมาเป็น True,False
  • compareTo() - ต่างจาก equals นิดหน่อย เพราะว่าอันนี้มันจะ Return ค่าเป็นตัวเลข ตัวเลขนี้เกิดจากการ เอาผลรวมของค่า ASCII ของ String ตัวเองกับ String ที่ Compare ด้วยมาลบกัน
  • concat() - ไว้เชื่อม String เข้าด้วยกัน (จริงๆใช้เครื่องหมาย + ไปซะก็จบ เหมือนกัน)
  • substring() - ตามชื่อเลยครับ เอาไว้ substring โดย Input ตำแหน่งเริ่มต้น กับสุดท้ายที่ต้องการ แล้วมันจะตัดส่งกลับมาให้เลย เช่น a.substring(0,5); นั่นคือ เอา Char ที่อยู่ตำแหน่ง 0 ถึง 5 ออกมา
  • replace() - ตามชื่ออีกเหมือนกัน มันจะแทนที่ String เดิม (เป็นคำหรือตัวอักษรก็ได้) ด้วย String ใหม่ที่เรากำหนดลงไป เช่น a.replace("Java","World"); มันก็คือการเอาคำว่า World ไปแทนที่คำว่า Java ใน String a ทั้งหมด (ไม่ต้องแคร์ว่าใน a มันจะมีคำว่า Java หรือไม่เพราะถ้ามันหาไม่เจอมันก็จะไม่มีอะไรเกิดขึ้น)
  • toUpperCase() - อันนี้มันจะทำให้ String ที่เราใช้ Method นี้กลายเป็นตัวใหญ่ทั้งหมดเช่น จาก Hello -> HELLO เป็นต้น เช่น a.toUpperCase(); มันก็จะเปลี่ยน String ใน a ให้เป็นตัวใหญ่ทั้งหมด
  • toLowerCase() - อันนี้จะตรงข้ามกับ toUpperCase มันจะทำให้ String ที่ใช้ Method นี้กลายเป็นตัวเล็กทั้งหมด
  • charAt() - อันนี้เป็นการเอา char ที่ตำแหน่งใดๆมา เช่นมี String a ที่มีค่าเป็น Hello ถ้าเราบอกว่า a.charAt(0) จะได้ออกมาเป็น H เป็นต้น
    จบเรื่อง String และ เห็นมั้ยว่ามันง่ายมากกก แต่ String เนี่ยมันก็มีข้อเสียอยู่คือ
    เวลาเรากำหนดค่าให้มันไปแล้ว เราจะเปลี่ยนค่ามันไม่ได้ นั่นคือ ต่อไม่ได้ ทำอะไรไม่ได้เลย เหมือนค่าคงที่ตัวนึง
    แต่!!! แต่เราเห็นว่า อ้าวมันทำได้นิ!! แล้วทำไมบอกว่าทำไม่ได้?
    จริงๆแล้วการที่เราเปลี่ยนแปลง String อะไรทั้งหมด มันคือการสร้าง String ใหม่ในชื่อเดิม
    ลองคิดเล่น ถ้า String ตัวเดียวเราก็คงไม่เห็นผลเท่าไหร่ ลองเป็น String เยอะๆยาวๆดูสิ จะเห็นได้ชัดเลย
    ดังนั้น StringBuilder กับ StringBuffer จึงเกิดขึ้นมาเพื่อแก้ปัญหานี้!!

ถามว่าแล้วเราจะสร้างมันขึ้นมาได้ยังไง
ก่อนหน้านั้น ขอให้มองมัน 2 ตัวนี้เป็น Class ตัวนึงก่อน เหมือนเดิม การสร้าง Object จาก Class
ในที่นี้ผมจะยกตัวอย่างแค่ StringBuffer พอนะ เพราะว่าการใช้มันเหมือนกันเลย (ส่วนความแตกต่างเดียวจะมาอธิบายข้างล่างนะ)
มาสร้างกันเลย สมมุติว่าผมจะสร้าง StringBuffer ชื่อ sb มาตัวนึง

StringBuffer sb = new StringBuffer();
[/code]

**Warning เราไม่สามารถ sb = “Hello”; ไม่ได้นะ มันจะ Error**

แค่นี้เองเราก็จะได้ StringBuffer ตัวนึงมาใช้แล้ว ทีนี้เรามาดู Method ของมันบ้าง
  • append() - อันนี้เราจะส่ง String แล้วเอาไปต่อข้างหลังสุด เช่น sb.append(“Hello World”); เพราะฉะนั้น StringBuffer ของเราจะมีคำว่า Hello World อยู่ด้านหลังสุด

  • insert() - คล้ายๆ append เมื่อกี้เลย แต่ append มันเอาไปต่อที่หลังสุด insert ก็เอาไปต่อเหมือนกัน แต่เราระบุตำแหน่งเองได้ เช่น sb.insert(0,”HI!!”); จากเมื่อกี้เรามีคำว่า Hello World อยู่แล้ว ถ้าเราอัก insert เมื่อกี้เข้าไปมันก็จะเป็น HI!!Hello World

  • delete() - ตามชื่อเลยคือการลบออก เช่น sb.delete(0,3); นั่นคือการ delete char ตั้งแต่ตำแหน่ง 0 ถึง 3 นั่นคือคำว่า HI!! เพราะฉะนั้น sb จะเหลือแค่คำว่า Hello World เหมือนเดิม

  • length() - ก็ตามชื่ออีกตามเคย เราจะได้จำนวนตัวอักษรของมันกลับมา เช่น sb.length(); ใน sb เรามี Hello World เพราะฉะนั้นค่าที่เราจะได้จาก Method length ก็คือ 11 นั่นเอง (รวม space ด้วยนะ)

    อย่างที่ผมบอกไว้ตอนข้างบนว่า เดียวจะมาอธิบายความแตกต่างของ StringBuilder กับ StringBuffer

    จริงๆแล้วมันทั้ง 2 นั้นต่างกันเพียงเล็กน้อยเท่านั้น

    ต่างกันในเรื่องของ Thread S****ynchronization ซึ่งผมว่ามันลึกไปในระดับเบื้องต้นจึงไม่ขอพูดถึงในที่นี้

    เอาง่ายๆถ้าอยาก Play Safe ให้ใช้ StringBuffer

    แต่ถ้าอยากไวใน String ใหญ่ๆยาวๆ (รู้นะคิดอะไรกัน) ให้ใช้ StringBuilder
    จบแล้ว สำหรับเรื่อง String ตอนนี้น่าจะมาได้สักครึ่งทางของ Java 101 แล้ว สู้ๆๆ

    Source Code
    **String : ** https://drive.google.com/folderview?id=0BwrPA9Miv4o2RUFsbzVNT1Q3YXc&usp=sharing
    ** StringBuilder & StringBuffer : ** https://drive.google.com/folderview?id=0BwrPA9Miv4o2RlB0YUFCcUN0b0k&usp=sharing

Read Next...

ติดตั้ง Zigbee Dongle บน Synology NAS กับ Home Assistant

ติดตั้ง Zigbee Dongle บน Synology NAS กับ Home Assistant

ก่อนหน้านี้เราเปลี่ยนมาใช้ Zigbee Dongle กับ Home Assistant พบว่าเสถียรขึ้นเยอะมาก อุปกรณ์แทบไม่หลุดออกจากระบบเลย แต่การติดตั้งมันเข้ากับ Synology DSM นั้นมีรายละเอียดมากกว่าอันอื่นนิดหน่อย วันนี้เราจะมาเล่าวิธีการเพื่อใครเอาไปทำกัน...

โหลด CSV วิธีไหนเร็วที่สุด ?

โหลด CSV วิธีไหนเร็วที่สุด ?

เมื่อหลายวันก่อนมีพี่ที่รู้จักกันมาถามว่า เราจะโหลด CSV ยังไงให้เร็วที่สุด เป็นคำถามที่ดูเหมือนง่ายนะ แต่พอมานั่งคิด ๆ ต่อ เห้ย มันมีอะไรสนุก ๆ ในนั้นเยอะเลยนี่หว่า วันนี้เราจะมาเล่าให้อ่านกันว่า มันมีวิธีการอย่างไรบ้าง และวิธีไหนเร็วที่สุด เหมาะกับงานแบบไหน...

ฮาวทู Sync Obsidian Note ด้วย LiveSync Plugin

ฮาวทู Sync Obsidian Note ด้วย LiveSync Plugin

ตั้งแต่ใช้ Obsidian เป็น App จด Note หลัก ชอบวิธีการจัดการมาก ๆ เมื่อใช้งานร่วมกับ Plugin ต่าง ๆ ยิ่งทำให้การใช้งานยืดหยุ่นมากกว่าเดิมอีกเยอะมาก ๆ ติดอยู่เรื่องเดียวคือ การใช้งานในหลาย ๆ อุปกรณ์ แต่เราเจอ Plugin ตัวนึงที่น่าสนใจมาก ๆ คือ LiveSync วันนี้เราจะมาเล่าวิธีการติดตั้ง และใช้งานมันกัน...

การสร้าง SSD Storage Pool บน Synology DSM

การสร้าง SSD Storage Pool บน Synology DSM

สำหรับคนที่ใช้ Synology NAS บางรุ่นจะมีช่อง M.2 สำหรับเสียบ NVMe SSD โดยพื้นฐาน Synology บอกว่ามันสำหรับการทำ Cache แต่ถ้าเราต้องการเอามันมาทำเป็น Storage ละ มันจะทำได้มั้ย วันนี้เราจะมาเล่าวิธีการทำกัน...