บล็อกโค้ดบนโต๊ะมิ้นต์มีไม้บรรทัดดึงเยื้องร่วมออกเหลือเนื้อหาตรงคอลัมน์

Java String.stripIndent: ตัดเยื้องร่วมของบล็อกข้อความ

น้องกายEngineering

วาง SQL / HTML / JSON ในโค้ดแล้วเยื้องตามคลาสจนสตริงเต็มไปด้วยช่องว่างนำหน้าไหมครับ — String.stripIndent() ตัดเยื้องร่วมต่ำสุดของทุกบรรทัด (รวมบรรทัดท้าย) ออกให้

ใช้คู่ text blocks ("""...""") ได้ดี: เขียนให้อ่านในไฟล์ Java สวย แล้ว stripIndent() ก่อนส่งต่อ

public class Main {
    public static void main(String[] args) {
        String block = """
                line1
                    indented
                line3
                """.stripIndent();
        String expected = "line1\n    indented\nline3\n";
        assert block.equals(expected) : block;
        System.out.println("ok");
    }
}

หมายเหตุ: บรรทัดที่ว่างทั้งหมดถูกตัดเยื้องต่างจากบรรทัดที่มีเนื้อหาเล็กน้อย — อ่าน Javadoc ก่อนพึ่งในพาร์เซอร์เข้มงวด

Recap

  • ใช้ stripIndent() หลัง text block ก่อนส่งสตริงออกนอกคลาส
  • อย่าสับสนกับ strip() / trim() ที่ตัดหัวท้ายทั้งสตริง
  • เทสต์กับเคสมีบรรทัดว่างและแท็บถ้าพาร์เซอร์อ่อนไหว