1. การเปรียบเทียบสตริง

หนึ่งในการดำเนินการทั่วไปกับสตริงคือการเปรียบเทียบ คลาสสตริงมีเมธอดต่างๆ มากกว่า 10 วิธีที่ใช้ในการเปรียบเทียบสตริงหนึ่งกับสตริงอื่น ด้านล่างนี้เราจะพิจารณาเจ็ดรายการหลัก

วิธีการ คำอธิบาย
boolean equals(String str)
สตริงจะถือว่าเท่ากันหากอักขระทั้งหมดตรงกัน
boolean equalsIgnoreCase(String str)
เปรียบเทียบสตริง โดยไม่สนใจตัวพิมพ์เล็กและใหญ่ (ไม่สนใจว่าจะเป็นตัวพิมพ์ใหญ่หรือตัวพิมพ์เล็ก)
int compareTo(String str)
เปรียบเทียบสตริงตามพจนานุกรม คืนค่า 0 ถ้าสตริงเท่ากัน ค่าส่งกลับน้อยกว่าศูนย์หากสตริงปัจจุบันน้อยกว่าพารามิเตอร์สตริง ค่าส่งกลับมากกว่าถ้าสตริงปัจจุบันมากกว่าพารามิเตอร์สตริง
int compareToIgnoreCase(String str)
เปรียบเทียบสตริงตามพจนานุกรมโดยไม่สนใจตัวพิมพ์เล็กและใหญ่ คืนค่า 0 ถ้าสตริงเท่ากัน ค่าส่งกลับเป็นค่าลบหากสตริงปัจจุบันน้อยกว่าพารามิเตอร์สตริง ค่าส่งกลับมากกว่าถ้าสตริงปัจจุบันมากกว่าพารามิเตอร์สตริง
boolean regionMatches(int toffset, String str, int offset, int len)
เปรียบเทียบส่วนของสตริง
boolean startsWith(String prefix)
ตรวจสอบว่าสตริงปัจจุบันเริ่มต้นด้วยสตริงหรือไม่prefix
boolean endsWith(String suffix)
ตรวจสอบว่าสตริงปัจจุบันลงท้ายด้วยสตริงหรือไม่suffix

สมมติว่าคุณต้องการเขียนโปรแกรมที่ขอเส้นทางไปยังไฟล์จากผู้ใช้ จากนั้นตรวจสอบประเภทไฟล์ตามนามสกุล รหัสของโปรแกรมดังกล่าวอาจมีลักษณะดังนี้:

รหัส หมายเหตุ
Scanner console = new Scanner(System.in);
String path = console.nextLine();

if (path.endsWith(".jpg") || path.endsWith(".jpeg"))
{
   System.out.println("This is a jpeg!");
}
else if (path.endsWith(".htm") || path.endsWith(".html"))
{
   System.out.println("This is an HTML page");
}
else if (path.endsWith(".doc") || path.endsWith(".docx"))
{
   System.out.println("This is a Word document");
}
else
{
   System.out.println("Unknown format");
}
สร้างScannerวัตถุ
อ่านบรรทัดจากคอนโซล

ตรวจสอบว่าสตริงpathลงท้ายด้วยสตริงที่กำหนด หรือไม่


2. ค้นหาสตริงย่อย

หลังจากเปรียบเทียบสตริงแล้ว การดำเนินการที่นิยมรองลงมาคือการค้นหาสตริงหนึ่งภายในอีกสตริงหนึ่ง คลาส String ยังมีวิธีการบางอย่างสำหรับสิ่งนี้:

วิธีการ คำอธิบาย
int indexOf(String str)
ค้นหาสตริงstrในสตริงปัจจุบัน ส่งกลับดัชนีของอักขระตัวแรกของเหตุการณ์แรก
int indexOf(String str, int index)
ค้นหาสตริงstrในสตริงปัจจุบัน โดยข้ามindexอักขระตัว แรก ส่งกลับดัชนีของการเกิดขึ้น
int lastIndexOf(String str)
ค้นหาสตริงstrในสตริงปัจจุบัน โดยเริ่มจากจุดสิ้นสุด ส่งกลับดัชนีของการเกิดขึ้นครั้งแรก
int lastIndexOf(String str, int index)
ค้นหาสตริงstrในสตริงปัจจุบันจากจุดสิ้นสุด โดยข้ามindexอักขระตัว แรก
boolean matches(String regex)
ตรวจสอบว่าสตริงปัจจุบันตรงกับรูปแบบที่ระบุโดยนิพจน์ทั่วไปหรือไม่

indexOf(String)และวิธีindexOf(String, index)การมักจะใช้ร่วมกัน เมธอดแรกให้คุณค้นหาการเกิดขึ้นครั้งแรกของสตริงย่อยที่ส่งผ่านในสตริงปัจจุบัน และวิธีที่สองช่วยให้คุณค้นหาเหตุการณ์ที่สอง สาม ฯลฯ ได้โดยการข้ามอักขระดัชนีตัวแรก

สมมติว่าเรามี url เช่น " https://domain.com/about/reviews " และเราต้องการแทนที่ชื่อโดเมนด้วย " codegym.cc " URL สามารถมีชื่อโดเมนต่างๆ ได้ทุกประเภท แต่เราทราบข้อมูลต่อไปนี้:

  • ชื่อโดเมนนำหน้าด้วยเครื่องหมายทับสองตัว — " //"
  • ชื่อโดเมนตามด้วยเครื่องหมายทับ — " /"

นี่คือลักษณะของรหัสสำหรับโปรแกรมดังกล่าว:

รหัส หมายเหตุ
Scanner console = new Scanner(System.in);
String path = console.nextLine();

int index = path.indexOf("//");
int index2 = path.indexOf("/", index + 2);

String first = path.substring(0, index + 2);
String last = path.substring(index2);

String result = first + "codegym.cc" + last;
System.out.println(result);
สร้างวัตถุสแกนเนอร์
อ่านบรรทัดจากคอนโซล

รับดัชนีของการเกิดขึ้นครั้งแรกของสตริง " //"
เราได้รับดัชนีของการเกิดขึ้นครั้งแรกของสตริงแต่/ดูเฉพาะหลังจากอักขระที่เกิดขึ้น เราได้รับสตริงจากจุดเริ่มต้นไปยังจุดสิ้นสุดของอักขระ เราได้รับสตริงจากจุดสิ้นสุด เราเชื่อมสตริงและโดเมนใหม่เข้าด้วยกัน //
//
/

เมธอดlastIndexOf(String)and lastIndexOf(String, index)ทำงานในลักษณะเดียวกัน เฉพาะการค้นหาที่ดำเนินการจากจุดสิ้นสุดของสตริงไปยังจุดเริ่มต้น



3. การสร้างสตริงย่อย

นอกจากการเปรียบเทียบสตริงและการค้นหาสตริงย่อยแล้ว ยังมีอีกวิธีหนึ่งที่เป็นที่นิยมมาก นั่นคือ การรับสตริงย่อยจากสตริง ดังตัวอย่างก่อนหน้านี้ที่แสดงให้คุณเห็นsubstring()การเรียกใช้เมธอดที่ส่งคืนส่วนหนึ่งของสตริง

นี่คือรายการ 8 วิธีที่ส่งคืนสตริงย่อยจากสตริงปัจจุบัน:

วิธีการ คำอธิบาย
String substring(int beginIndex, int endIndex)
beginIndex..endIndexส่งกลับสตริงย่อยที่ ระบุโดยช่วงดัชนี
String repeat(int count)
ทำซ้ำสตริงปัจจุบัน n ครั้ง
String replace(char oldChar, char newChar)
ส่งคืนสตริงใหม่: แทนที่อักขระoldCharด้วยอักขระnewChar
String replaceFirst(String regex, String replacement)
แทนที่สตริงย่อยแรกที่ระบุโดยนิพจน์ทั่วไปในสตริงปัจจุบัน
String replaceAll(String regex, String replacement)
แทนที่สตริงย่อยทั้งหมดในสตริงปัจจุบันที่ตรงกับนิพจน์ทั่วไป
String toLowerCase()
แปลงสตริงเป็นตัวพิมพ์เล็ก
String toUpperCase()
แปลงสตริงเป็นตัวพิมพ์ใหญ่
String trim()
ลบช่องว่างทั้งหมดที่จุดเริ่มต้นและจุดสิ้นสุดของสตริง

นี่คือบทสรุปของวิธีการที่มีอยู่:

substring(int beginIndex, int endIndex)วิธี

เมธอดsubstringส่งกลับสตริงใหม่ที่ประกอบด้วยอักขระในสตริงปัจจุบัน เริ่มต้นที่อักขระที่มีดัชนีbeginIndexและสิ้นสุดendIndexที่ เช่นเดียวกับช่วงเวลาทั้งหมดใน Java อักขระที่มีดัชนีendIndexจะไม่รวมอยู่ในช่วงเวลา ตัวอย่าง:

รหัส ผลลัพธ์
"Hellos".substring(0, 3);
"Hel"
"Hellos".substring(1, 4);
"ell"
"Hellos".substring(1, 6);
"ellos"
"Hellos".substring(1);
"ellos"

หากendIndexไม่ได้ระบุพารามิเตอร์ (ซึ่งเป็นไปได้) สตริงย่อยจะถูกดึงจากอักขระที่beginIndexไปยังจุดสิ้นสุดของสตริง

repeat(int n)วิธี

nวิธีการทำซ้ำจะทำซ้ำ เวลาสตริงปัจจุบัน ตัวอย่าง:

รหัส ผลลัพธ์
"Hello".repeat(3);
"HelloHelloHello"
"Hello".repeat(2);
"HelloHello"
"Hello".repeat(1);
"Hello"
"Hello".repeat(0);
""

replace(char oldChar, char newChar)วิธี

เมธอดreplace()ส่งคืนสตริงใหม่ที่อักขระทั้งหมด ถูก แทนที่oldCharด้วยอักขระ newCharสิ่งนี้จะไม่เปลี่ยนความยาวของสตริง ตัวอย่าง:

รหัส ผลลัพธ์
"Programming".replace('Z', 'z');
"Programming"
"Programming".replace('g', 'd');
"Prodrammind"
"Programming".replace('a', 'e');
"Progremming"
"Programming".replace('m', 'w');
"Prograwwing"

replaceFirst()และreplaceAll()วิธีการ

เมธอดreplaceAll()จะแทนที่สตริงย่อยทั้งหมดที่เกิดขึ้นด้วยอีกสตริงหนึ่ง เมธอดreplaceFirst()แทนที่การเกิดขึ้นครั้งแรกของสตริงย่อยที่ผ่านด้วยสตริงย่อยที่ระบุ สตริงที่จะแทนที่ระบุโดยนิพจน์ทั่วไป เราจะเจาะลึกไปที่ Regular Expression ในภารกิจJava Multithreading

ตัวอย่าง:

รหัส ผลลัพธ์
"Good news everyone!".replaceAll("e.", "EX");
"Good nEXs EXEXyonEX"
"Good news everyone!".replaceAll("o.", "-o-");
"G-o-d news every-o-e!"
"Good news everyone!".replaceFirst("e.", "EX");
"Good nEXs everyone!"
"Good news everyone!".replaceFirst("o.", "-o-");
"G-o-d news everyone!"

toLowerCase() and toUpperCase()วิธีการ

เราได้รู้จักเมธอดเหล่านี้เมื่อเราเรียนรู้เกี่ยวกับการเรียกเมธอดของStringคลาส

trim()วิธี

วิธีtrim()การลบช่องว่างนำหน้าและต่อท้ายจากสตริง ไม่สัมผัสช่องว่างที่อยู่ภายในสตริง (เช่น ไม่อยู่ที่จุดเริ่มต้นหรือจุดสิ้นสุด) ตัวอย่าง:

รหัส ผลลัพธ์
"     ".trim();
""
"Hello".trim();
"Hello"
" Hello\n how are you?\n   ".trim();
"Hello\n how are you?\n"
"  Password\n   \n ".trim();
"Password\n   \n"