บทนำ
ในบทความนี้ เราจะเรียนรู้วิธีการพิมพ์ตัวอักษรแรกของแต่ละคำในสตริงด้วย Regular Expression (Regex) Regular Expression คือลำดับของตัวอักษรที่สร้างเป็นรูปแบบการค้นหา (Search pattern) อาจเป็นตัวอักษรเดียวหรือรูปแบบซับซ้อนก็ได้
Regular Expression ช่วยให้คุณจับคู่หรือค้นหาสตริงหรือเซตของสตริงอื่นๆ ได้ โดยใช้ syntax เฉพาะที่เก็บอยู่ใน pattern สามารถนำไปใช้ค้นหา แก้ไข หรือจัดการข้อความและข้อมูลได้
ตัวอย่างการทำงาน
อินพุทตัวอย่าง:
Input String_1: Java Program Input String_2: Joy of learning
เอาต์พุทที่คาดหวัง:
Result_1: JP Result_2: Jol
อัลกอริทึม
ขั้นตอนที่ 1 - เริ่มต้น ขั้นตอนที่ 2 - ประกาศสตริงสองตัว: input_string_1, input_string_2, Pattern string_pattern และ Matcher string_matcher ขั้นตอนที่ 3 - กำหนดค่า ขั้นตอนที่ 4 - ใช้ while-loop คำนวณ string_matcher.group() เพื่อดึงตัวอักษรแรกของแต่ละคำ ขั้นตอนที่ 5 - แสดงผลลัพธ์ ขั้นตอนที่ 6 - จบการทำงาน
ตัวอย่างที่ 1: เขียนในฟังก์ชัน main โดยตรง
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Regex {
public static void main(String[] args) {
System.out.println("Required packages have been imported");
String input_string_1 = "Java Program";
System.out.println("\nThe first string is defined as: " + input_string_1);
Pattern string_pattern = Pattern.compile("\\b[a-zA-Z]");
Matcher string_matcher = string_pattern.matcher(input_string_1);
System.out.println("The first letters of the string is : ");
while (string_matcher.find()) {
System.out.print(string_matcher.group());
}
System.out.println();
String input_string_2 = "Joy of learning";
System.out.println("\nThe second string is defined as: " + input_string_2);
Matcher string_matcher_2 = string_pattern.matcher(input_string_2);
System.out.println("The first letters of the string is : ");
while (string_matcher_2.find()) {
System.out.print(string_matcher_2.group());
}
System.out.println();
}
}
เอาต์พุท
Required packages have been imported The first string is defined as: Java Program The first letters of the string is : JP The second string is defined as: Java Program The first letters of the string is : Jol
⚠️ หมายเหตุ: โค้ดต้นฉบับมีบั๊กบรรทัดสุดท้าย: `System.out.println("\nThe second string is defined as: " + input_string_1);` ควรเป็น `input_string_2`
ตัวอย่างที่ 2: ใช้เมธอดแยก (Object-Oriented Style)
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Regex {
static void print_regex_string(String s) {
Pattern string_pattern = Pattern.compile("\\b[a-zA-Z]");
Matcher string_matcher = string_pattern.matcher(s);
System.out.println("The first letters of the string is : ");
while (string_matcher.find()) {
System.out.print(string_matcher.group());
}
System.out.println();
}
public static void main(String[] args) {
System.out.println("Required packages have been imported");
String input_string_1 = "Java Program";
System.out.println("\nThe first string is defined as: " + input_string_1);
print_regex_string(input_string_1);
String input_string_2 = "Joy of learning";
System.out.println("\nThe second string is defined as: " + input_string_2);
print_regex_string(input_string_2);
}
}
เอาต์พุท
Required packages have been imported The first string is defined as: Java Program The first letters of the string is : JP The second string is defined as: Java Program The first letters of the string is : Jol
⚠️ หมายเหตุ: โค้ดต้นฉบับบรรทัด `System.out.println("\nThe second string is defined as: " + input_string_1);` ควรเป็น `input_string_2` (แก้ไขแล้วในตัวอย่างข้างต้น)
อธิบาย Regex Pattern: `\\b[a-zA-Z]`
- `\\b` - Word boundary (ขอบเขตของคำ)
- `[a-zA-Z]` - ตัวอักษรอังกฤษพิมพ์ใหญ่หรือเล็ก ตัวใดตัวหนึ่ง
- รวมกัน = ตัวอักษรแรกของแต่ละคำ
ขยายสำหรับ Unicode (ภาษาไทย ฯลฯ): ใช้ `\\p{L}` แทน `[a-zA-Z]`