ตัวอย่างในบทความนี้สรุปการใช้สตริงใน Java แบ่งปันกับทุกคนสำหรับการอ้างอิงของคุณ การวิเคราะห์เฉพาะมีดังนี้:
สาระสำคัญของสตริงคืออาร์เรย์ประเภทถ่าน แต่ใน Java สตริงทั้งหมดที่ประกาศด้วยเครื่องหมายคำพูดคู่ "" เป็นอ็อบเจ็กต์ของคลาส String นอกจากนี้ยังสะท้อนถึงคุณลักษณะภาษาเชิงวัตถุของ Java อย่างสมบูรณ์
คลาสสตริง
1. อ็อบเจ็กต์คลาส String แสดงถึงสตริงคงที่ มันมีความยาวไม่เปลี่ยนรูป กล่าวอีกนัยหนึ่ง เมื่ออินสแตนซ์ของคลาส String ถูกสร้างขึ้น สตริงที่แสดงโดยอินสแตนซ์นี้จะไม่สามารถเปลี่ยนแปลงได้ คล้ายกับ
str = str + "สวัสดี";
การดำเนินการนี้จะสร้างอ็อบเจ็กต์ String ใหม่โดยการรวมอ็อบเจ็กต์ String สองตัว str และ "Hello" จากนั้นกำหนดการอ้างอิงของอ็อบเจ็กต์ String ใหม่ให้กับ str การใช้การดำเนินการนี้อย่างกว้างขวางอาจทำให้เกิดข้อบกพร่องด้านประสิทธิภาพ หากคุณต้องการเปลี่ยนเนื้อหาของสตริงบ่อยครั้ง คุณควรใช้คลาส StringBuffer หรือคลาส StringBuilder เราสามารถใช้โปรแกรมขนาดเล็กเพื่อดูว่าประสิทธิภาพระหว่างคลาส String และ StringBuffer แตกต่างกันมากเพียงใด
class StringTest { public static void main(String[] args) { /** * ดำเนินการผนวก 10,000 ครั้งโดยใช้วัตถุ String และวัตถุ StringBuffer ตามลำดับ * ทดสอบเวลาดำเนินการ * 2013.3.18 */ String constStr = ""; currentTimeMillis(); สำหรับ (int i = 0; i < 10,000; ++i) constStr += i; System.out.println("Const String:"+(System.currentTimeMillis()-lTime)); StringBuilder strBuf = ใหม่ StringBuilder(""); lTime = System.currentTimeMillis(); สำหรับ (int i = 0 ; i < 10,000 ; ++i) strBuf.append(String.valueOf(i)); System.out.println("บัฟเฟอร์ สตริง: "+(System.currentTimeMillis()-lTime)); } }ผลการดำเนินการ:
จะเห็นได้ว่า StringBuilder ใช้เวลาไม่กี่วินาที แต่คลาส String ใช้เวลา 300ms ซึ่งแสดงความแตกต่างด้านประสิทธิภาพอย่างมาก
ทั้ง StringBuilder และ StringBuffered แสดงถึงออบเจ็กต์สตริงที่มีความยาวผันแปรได้ (ไม่แน่นอน) ความแตกต่างระหว่างกันคือคลาส StringBuffered ทำการประมวลผลด้านความปลอดภัยในแง่ของการซิงโครไนซ์เธรด ในขณะที่ StringBuilder ทำสิ่งที่ตรงกันข้าม ดังนั้นหากคุณเขียนโปรแกรมในบรรทัดเดียวเท่านั้น StringBuilder จะมีประสิทธิภาพมากกว่า StringBuffered เล็กน้อย (จริงๆ แล้วความแตกต่างไม่ได้ใหญ่มาก)
2. "Hello World" เป็นวัตถุ String เราสามารถใช้ "Hello World" เป็นวัตถุได้โดยตรง เช่น:
if("Hello".equals("Hello")) System.out.println("ใช่");ผลลัพธ์ที่ได้คือใช่
3. เมื่อเปรียบเทียบออบเจ็กต์สตริง คุณต้องใช้เมธอดเท่ากับ() แทนที่จะใช้ == เพื่อตัดสิน เนื่องจาก == เปรียบเทียบว่าอินสแตนซ์ที่อ้างอิงโดยชื่ออ้างอิงสองชื่อเหมือนกันหรือไม่ วิธีการเท่ากับ () จะเปรียบเทียบว่าสตริงในทั้งสองวัตถุเท่ากันหรือไม่
คำถามทั่วไปคือ ตัวอย่างโค้ดต่อไปนี้สร้างออบเจ็กต์ String ได้ทั้งหมดจำนวนเท่าใด
สตริง str1 = สตริงใหม่ ("สวัสดี");สตริง str2 = สตริงใหม่ ("สวัสดี");คนส่วนใหญ่คงจะตอบว่า 2. แต่ในความเป็นจริงแล้ว มีการสร้างวัตถุสตริงทั้งหมด 3 รายการที่นี่ นอกจาก str1 และ str2 แล้ว อย่าลืมว่า "Hello" ยังเป็นอ็อบเจ็กต์ String อีกด้วย
4. สตริงพูล (พูล)
Java รักษา String Pool เมื่อดำเนินการ เมื่อสตริงที่ประกาศด้วยเครื่องหมายคำพูดคู่ปรากฏขึ้น อันดับแรก JVM จะตรวจสอบว่ามีออบเจ็กต์ String เดียวกัน (ที่มีอักขระเดียวกัน) อยู่ในหน่วยความจำหรือไม่ หากมีอยู่แล้ว ก็จะส่งคืนการอ้างอิงไปยังออบเจ็กต์ที่มีอยู่แล้วในหน่วยความจำ ไม่มีอยู่ มันจะสร้างมันขึ้นมา วัตถุ String ใหม่ สิ่งนี้จะช่วยประหยัดหน่วยความจำ ดังที่แสดงในโค้ดต่อไปนี้ str1 และ str2 ชี้ไปที่วัตถุ String เดียวกัน
สตริง str1 = "สวัสดี";สตริง str2 = "สวัสดี";
5. รับพารามิเตอร์บรรทัดคำสั่ง
เมื่อเราประกาศวิธีการหลัก เราจะประกาศพารามิเตอร์อย่างเป็นทางการประเภท String[] อาร์เรย์ของออบเจ็กต์ String นี้เก็บพารามิเตอร์บรรทัดคำสั่งที่ส่งผ่านโดยผู้ใช้เมื่อรันโปรแกรมนี้ โปรดทราบว่าพารามิเตอร์บรรทัดคำสั่งใน Java แตกต่างจากภาษา C โดยเริ่มต้นจากตัวแปรแรกหลังชื่อโปรแกรม กล่าวอีกนัยหนึ่ง ข้อมูล String[] จะไม่รวมชื่อแอปพลิเคชัน ตัวอย่างเช่น:
class strCmd { โมฆะสาธารณะหลัก (สตริง [] args) { if (args.length > 0) { สำหรับ (String str: args) System.out.println (str);ผลลัพธ์เมื่อรัน java strCmd Hello World!
6. การแยกสาย
เช่นเดียวกับ strtok ในภาษา C คลาส String ยังมีวิธีการแยกที่สามารถแยกสตริงในรูปแบบที่ระบุได้ วิธีการแยกส่งกลับอาร์เรย์ของวัตถุสตริงซึ่งเป็นตัวแทนของแต่ละสตริงที่แยกจากกัน ชอบ:
คลาส strSplit { สาธารณะคงเป็นโมฆะ main (String [] args) { String str = "Hello/tWorld/tI/tLove/tYou!"; System.out.println ("Original String : " + str); String [] strArr = str.split("/t"); สำหรับ (สตริง s : strArr) System.out.println(s);ในบรรดาพารามิเตอร์เหล่านี้ พารามิเตอร์ของเมธอด split() อาจเป็นนิพจน์ทั่วไปได้ คุณสามารถใช้เมธอดคงที่matchs() ของคลาส Matcher ในแพ็คเกจ java.util เพื่อตรวจสอบว่าสตริงตรงกับนิพจน์ทั่วไปหรือไม่
คลาส String มีฟังก์ชันอันทรงพลังอื่นๆ อีกมากมาย และเราควรเรียนรู้ที่จะอ่านเอกสาร API ที่นี่สะท้อนให้เห็นความสำคัญของภาษาอังกฤษ...
ฉันหวังว่าบทความนี้จะเป็นประโยชน์กับการเขียนโปรแกรม Java ของทุกคน