Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

Java Regex: แยกสตริงด้วย Line Endings (\r\n, \n)

ใน Windows ใช้ \r\n (CRLF) เป็น line separator ใน Unix/Linux ใช้ \n (LF) Regex \\r?\\n จับคู่ทั้งสองรูปแบบ

เมธอด split() ของ String รับ regex แยกสตริงเป็นอาร์เรย์ токัน (คำ) โดยถือว่าข้อความระหว่างสอง match เป็นหนึ่ง token

ตัวอย่าง

import java.util.Scanner;

public class RegexExample {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter your input string: ");
        String input = "sample text \r\n line1 \r\n line2 \r\n line3 \r\n line4";
        String[] strArray = input.split("\\r?\\n");
        
        for (int i = 0; i < strArray.length; i++) {
            System.out.println(strArray[i]);
        }
    }
}

ผลลัพธ์

Enter your input string:
sample text
 line1
 line2
 line3
 line4

อธิบาย

  • \\r?\\n = \r (optional) ตามด้วย \n → จับคู่ทั้ง \r\n (Windows) และ \n (Unix)
  • split() ตัดที่ delimiter และคืนส่วนที่เหลือ
  • Space นำหน้าแต่ละบรรทัดยังคงอยู่ (เพราะ input มี space)

ปรับปรุง: ตัด whitespace นำหน้า

String[] lines = input.split("\\r?\\n");
for (int i = 0; i < lines.length; i++) {
    System.out.println(lines[i].trim()); // ตัด space นำหน้า/ท้าย
}

วิธีอื่น: ใช้ Scanner


Scanner sc = new Scanner(input);
while (sc.hasNextLine()) {
    System.out.println(sc.nextLine().trim());
}
sc.close();

สรุป Line Separators

PlatformLine EndingRegex
WindowsCRLF\r\n
Unix/Linux/macOSLF\n
Classic Mac (OS 9)CR\r
Cross-platformทั้งสอง\r?\n หรือ \r\n|\n

Java System Property

String lineSeparator = System.lineSeparator(); // คืนค่าตาม platform
// Windows: \r\n, Unix: \n