คำถามที่ถูกถามบ่อยที่สุด 10 อันดับแรกเกี่ยวกับสตริงใน Java ได้รับการกล่าวถึงที่นี่
-
จะเปรียบเทียบสตริงได้อย่างไร? จะใช้อะไร: "
==
" หรือequals()
?กล่าวโดยย่อ "
==
" เปรียบเทียบการอ้างอิงถึงสตริง แต่equals()
เปรียบเทียบค่าที่มีอยู่ในสตริงเหล่านั้น หากคุณไม่ต้องการตรวจสอบว่าสองสตริงเป็นวัตถุเดียวกัน คุณควรใช้equals()
.นอกจากนี้ยังเป็นการดีที่จะทราบแนวคิดของstring pool
-
เหตุใด
char[]
จึงควรใช้สตริง (String
) เพื่อปกป้องข้อมูลที่ละเอียดอ่อนสตริงไม่เปลี่ยนรูป ซึ่งหมายความว่าเมื่อสร้างสตริงแล้ว จะไม่ได้รับการแก้ไขจนกว่าจะรันตัวรวบรวมขยะ ในกรณีของอาร์เรย์ เห็นได้ชัดว่าเราสามารถเปลี่ยนองค์ประกอบของอาร์เรย์ได้ ด้วยวิธีนี้ ข้อมูลที่ละเอียดอ่อน (เช่น รหัสผ่าน) จะไม่ถูกจัดเก็บไว้ในข้อความที่ชัดเจนทุกที่ในโปรแกรม
-
เราสามารถส่งสตริงเป็นพารามิเตอร์เมื่อใช้คำสั่ง switch ได้หรือไม่?
ใช่ เริ่มตั้งแต่เวอร์ชัน 7 ของ JDK ก่อนหน้านี้ในเวอร์ชัน 6 สิ่งนี้ไม่สามารถทำได้
// java 7 only! switch (str.toLowerCase()) { case "a": value = 1; break; case "b": value = 2; break; }
-
จะแปลงสตริงให้เป็นค่าจำนวนเต็มได้อย่างไร?
int n = Integer.parseInt("10");
เช่นเดียวกับประเภทดั้งเดิมอื่น ๆ ใน Java
-
จะแยกสตริงออกเป็นบรรทัดที่คั่นด้วยช่องว่างได้อย่างไร?
วิธีที่ง่ายที่สุดคือการใช้นิพจน์ทั่วไป "
\s
" ทำหน้าที่แทนอักขระช่องว่าง เช่น "\t
", "\r
", "\n
"String[] strArray = aString.split("\\s+");
-
< จริงๆ แล้ววิธีนี้ใช้ทำอะไร
substring()
?ใน JDK 6 วิธี
substring()
การแสดงส่วนหนึ่งของอักขระจากสตริงที่มีอยู่ แต่ไม่ได้สร้างอินสแตนซ์แยกต่างหากของสตริง หากต้องการสร้างสตริงใหม่ซึ่งแสดงเป็นอาร์เรย์ของอักขระ คุณสามารถเพิ่มสตริงว่างได้ เช่น:str.substring(m, n) + ""
ผลลัพธ์ที่ได้คืออาร์เรย์ของอักขระ ซึ่งเป็นสตริงใหม่ของเรา วิธีการนี้สามารถลดเวลาในการดำเนินการโค้ดได้เนื่องจากตัวรวบรวมขยะสามารถทำลายสตริงขนาดใหญ่ที่ไม่ได้ใช้ และจัดเก็บเฉพาะสตริงย่อยเท่านั้น
ใน Oracle JDK 7 วิธีการนี้
substring()
จะสร้างอาร์เรย์อักขระใหม่โดยไม่ต้องใช้อาร์เรย์ที่มีอยู่ คุณสามารถดูแผนภาพที่แสดงความแตกต่างระหว่างเมธอด substring() ใน JDK 6 และ JDK 7ได้ -
String กับ StringBuilder กับ StringBuffer
String
vsStringBuilder
:StringBuilder
ไม่แน่นอน ซึ่งหมายความว่าเราสามารถเปลี่ยนแปลงเนื้อหาได้หลังจากสร้างอ็อบเจ็กต์แล้วStringBuilder
vsStringBuffer
:StringBuffer
ซิงโครไนซ์ หมายความว่าทำงานได้อย่างถูกต้องเมื่อใช้จากหลายเธรดในเวลาเดียวกัน แต่ช้ากว่าStringBuilder
. -
จะทำซ้ำบรรทัดหลาย ๆ ครั้งได้อย่างไร?
ใน Python เราสามารถคูณสตริงด้วยตัวเลข
n
จากนั้นสตริงจะทำซ้ำ n ครั้ง ใน Java เราสามารถใช้เมธอดrepeat()
จากStringUtils
คลาสไลบรารี Apache Commons LangString str = "abcd"; String repeated = StringUtils.repeat(str,3); //abcdabcdabcd
-
วิธีแปลงสตริงเป็นวันที่?
String str = "Sep 17, 2013"; Date date = new SimpleDateFormat("MMMM d, yy", Locale.ENGLISH).parse(str); System.out.println(date); //Tue Sep 17 00:00:00 EDT 2013
-
จะนับจำนวนครั้งของอักขระบางตัวในสตริงได้อย่างไร?
ใช้คลาส
StringUtils
จากไลบรารี Apache Commons Langint n = StringUtils.countMatches("11112222", "1"); System.out.println(n);
GO TO FULL VERSION