By Arnon Puitrakul - 25 ธันวาคม 2014
เมื่อวานเราได้เรียนเรื่องของอะไรว่ะ ลืม... เดียวนะอ่อ 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 กันดีกว่า
ถามว่าแล้วเราจะสร้างมันขึ้นมาได้ยังไง
ก่อนหน้านั้น ขอให้มองมัน 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
เราเป็นคนที่อ่านกับซื้อหนังสือเยอะมาก ปัญหานึงที่ประสบมาหลายรอบและน่าหงุดหงิดมาก ๆ คือ ซื้อหนังสือซ้ำเจ้าค่ะ ทำให้เราจะต้องมีระบบง่าย ๆ สักตัวในการจัดการ วันนี้เลยจะมาเล่าวิธีการที่เราใช้ Obsidian ในการจัดการหนังสือที่เรามีกัน...
หากเราเรียนลงลึกไปในภาษาใหม่ ๆ อย่าง Python และ Java โดยเฉพาะในเรื่องของการจัดการ Memory ว่าเขาใช้ Garbage Collection นะ ว่าแต่มันทำงานยังไง วันนี้เราจะมาเล่าให้อ่านกันว่า จริง ๆ แล้วมันทำงานอย่างไร และมันมีเคสใดที่อาจจะหลุดจนเราต้องเข้ามาจัดการเองบ้าง...
ก่อนหน้านี้เราเปลี่ยนมาใช้ Zigbee Dongle กับ Home Assistant พบว่าเสถียรขึ้นเยอะมาก อุปกรณ์แทบไม่หลุดออกจากระบบเลย แต่การติดตั้งมันเข้ากับ Synology DSM นั้นมีรายละเอียดมากกว่าอันอื่นนิดหน่อย วันนี้เราจะมาเล่าวิธีการเพื่อใครเอาไปทำกัน...
เมื่อหลายวันก่อนมีพี่ที่รู้จักกันมาถามว่า เราจะโหลด CSV ยังไงให้เร็วที่สุด เป็นคำถามที่ดูเหมือนง่ายนะ แต่พอมานั่งคิด ๆ ต่อ เห้ย มันมีอะไรสนุก ๆ ในนั้นเยอะเลยนี่หว่า วันนี้เราจะมาเล่าให้อ่านกันว่า มันมีวิธีการอย่างไรบ้าง และวิธีไหนเร็วที่สุด เหมาะกับงานแบบไหน...