บทนำ
ในบทความนี้ เราจะเรียนรู้วิธีการเปรียบเทียบสตริงสองตัว การเปรียบเทียบระหว่างสตริงสองตัวสามารถทำได้โดยใช้ตัวดำเนินการเลขคณิต '==' สตริงเป็นลำดับของตัวอักษร ในภาษา Java สตริงถูกจัดการเป็นออบเจ็กต์
หมายเหตุ: บทความนี้แสดงการ implement เมธอด compareTo() เองด้วยตนเอง (Manual implementation) ไม่ใช่การใช้เมธอดสำเร็จรูป
ตัวอย่างการทำงาน
อินพุทตัวอย่าง:
Second string : Java Program First string : Java
เอาต์พุทที่คาดหวัง:
The result of string comparison is: 8
อัลกอริทึม
ขั้นตอนที่ 1 - เริ่มต้น ขั้นตอนที่ 2 - ประกาศตัวแปร ขั้นตอนที่ 3 - กำหนดค่า ขั้นตอนที่ 4 - คำนวณความยาวสตริง หาค่าต่ำสุด กำหนดให้ตัวแปร ขั้นตอนที่ 5 - วนลูปผ่านค่านั้น หาตัวอักษรที่ดัชนีแต่ละค่าในทั้งสองสตริง แปลงเป็น int เปรียบเทียบ ขั้นตอนที่ 6 - หาความต่างของตัวเลขระหว่างตัวอักษรเหล่านั้น คืนค่าเป็นผลลัพธ์ ขั้นตอนที่ 7 - แสดงผลลัพธ์ ขั้นตอนที่ 8 - จบการทำงาน
ตัวอย่างที่ 1: เขียนในฟังก์ชัน main โดยตรง
public class CompareStrings {
public static void main(String args[]) {
String input_string_1 = new String("Java Program");
System.out.println("The string is defined as: " + input_string_1);
String input_string_2 = new String("Java");
System.out.println("The string is defined as: " + input_string_2);
int length_1 = input_string_1.length();
int length_2 = input_string_2.length();
int minimum_length = Math.min(length_1, length_2);
int result = 0;
for (int i = 0; i < minimum_length; i++) {
int character_1 = (int)input_string_1.charAt(i);
int character_2 = (int)input_string_2.charAt(i);
if (character_1 != character_2) {
result = character_1 - character_2;
break;
}
}
if (result == 0 && length_1 != length_2) {
result = length_1 - length_2;
}
System.out.println("\nThe result of string comparison is: " + result);
}
}
เอาต์พุท
The string is defined as: Java Program The string is defined as: Java The result of string comparison is: 8
ตัวอย่างที่ 2: ใช้เมธอดแยก (Object-Oriented Style)
public class CompareStrings {
public static int string_compare(String input_string_1, String input_string_2) {
int length_1 = input_string_1.length();
int length_2 = input_string_2.length();
int minimum_length = Math.min(length_1, length_2);
for (int i = 0; i < minimum_length; i++) {
int character_1 = (int)input_string_1.charAt(i);
int character_2 = (int)input_string_2.charAt(i);
if (character_1 != character_2) {
return character_1 - character_2;
}
}
if (length_1 != length_2) {
return length_1 - length_2;
} else {
return 0;
}
}
public static void main(String args[]) {
String input_string_1 = new String("Java Program");
System.out.println("The string is defined as: " + input_string_1);
String input_string_2 = new String("Java");
System.out.println("The string is defined as: " + input_string_2);
System.out.println("\nThe result of string comparison is: " + string_compare(input_string_1, input_string_2));
}
}
เอาต์พุท
The string is defined as: Java Program The string is defined as: Java The result of string comparison is: 8
ตรรกะการทำงาน (เหมือน String.compareTo()):
- เปรียบเทียบตัวอักษรทีละคู่จากซ้ายไปขวา
- หากเจอตัวอักษรที่ต่างกัน → คืนค่าความต่าง Unicode (char1 - char2)
- หากตัวอักษรทุกคู่เหมือนกัน → คืนค่าความต่างความยาว (len1 - len2)
- หากทั้งสองอย่างเหมือนกัน → คืนค่า 0
การใช้งานจริง: ควรใช้ String.compareTo() ตัวจริง ซึ่งได้รับการ optimize และทดสอบแล้ว