0Pricing
Java Academy · บทเรียน

บล็อกข้อความและ String.format

เขียนสตริงหลายบรรทัดด้วยบล็อกข้อความ และจัดรูปแบบข้อมูลด้วยรูปแบบ String.format

บล็อกข้อความและ String.format เป็นบทเรียน Java Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Java Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Java Academy มีบทเรียนทั้งหมด 4 บทเรียน

บล็อกข้อความและ String.format

บล็อกข้อความ (Java 15 ขึ้นไป) ช่วยให้ใช้ลิเทอรัล String หลายบรรทัดได้โดยไม่ต้องใช้ลำดับหลีก เมื่อใช้ร่วมกับ String.format และ formatted() จะช่วยให้การสร้างเอาต์พุต String ที่ซับซ้อนสะอาดและอ่านง่าย

บล็อกข้อความคืออะไร

บล็อกข้อความคือลิเทอรัล String ที่ล้อมรอบด้วยเครื่องหมายอัญประกาศคู่สามตัว """ โดยจะรักษาการขึ้นบรรทัดใหม่และการเยื้องโดยอัตโนมัติ ทำให้ไม่ต้องใช้ลำดับหลีกสำหรับเนื้อหาหลายบรรทัด

// Traditional multi-line string
String old = "SELECT id, name, email\n" +
             "FROM users\n" +
             "WHERE active = true\n" +
             "ORDER BY name;";

// Text block (Java 15+) — much cleaner
String sql = """
    SELECT id, name, email
    FROM users
    WHERE active = true
    ORDER BY name;
    """;

System.out.println(sql);

การจัดการการเยื้อง

บล็อกข้อความจะตัดช่องว่างนำหน้าที่เหมือนกันโดยอัตโนมัติ ตำแหน่งของ """ ปิดจะเป็นตัวควบคุมการเยื้อง

// Leading spaces up to the closing """ are stripped
String json = """
        {
            "name": "Alice",
            "role": "admin"
        }
        """;
// Output has no leading spaces (stripped by common indent)
System.out.println(json);
// {
//     "name": "Alice",
//     "role": "admin"
// }

เครื่องหมายอัญประกาศภายใน

บล็อกข้อความสามารถมีเครื่องหมายอัญประกาศคู่ได้โดยไม่ต้องใช้ลำดับหลีก ตราบใดที่ไม่มีเครื่องหมายอัญประกาศสามตัวติดกัน เครื่องหมายอัญประกาศเดี่ยว " และคู่ "" สามารถใช้ได้ตามปกติ

String html = """
    <div class="container">
        <p class="title">Hello, World!</p>
        <a href="https://example.com">Click here</a>
    </div>
    """;
System.out.println(html);
// Note: no need to escape " inside the block

บล็อกข้อความสำหรับแม่แบบ JSON

บล็อกข้อความเหมาะอย่างยิ่งสำหรับแม่แบบ JSON, HTML, XML และ SQL ที่ใช้ในการทดสอบหรือการกำหนดค่า

String request = """
    {
        "email": "alice@example.com",
        "password": "secret123",
        "plan": "PRO"
    }
    """;

// In tests: compare expected JSON
String expected = """
    {
      "status": "created",
      "id": 42
    }
    """;
// Perfect for MockMvc test assertions
System.out.println(request);

formatted() กับบล็อกข้อความ

ใช้บล็อกข้อความร่วมกับ formatted() (Java 15 ขึ้นไป) เพื่อสร้างแม่แบบที่รับพารามิเตอร์

String name = "Alice";
long orderId = 1234L;
double total = 149.99;

String email = """
    Dear %s,

    Your order #%d has been confirmed.
    Total charged: $%.2f

    Thank you for shopping with us!
    """.formatted(name, orderId, total);

System.out.println(email);
// Dear Alice,
// Your order #1234 has been confirmed.
// Total charged: $149.99

ลำดับหลีกในบล็อกข้อความ

บล็อกข้อความรองรับ \n, \t และ \ ของ Java 14 ขึ้นไป (การต่อบรรทัด) รวมถึง \s (การรักษาช่องว่างท้ายบรรทัด)

// \s forces a space (preserves trailing whitespace on line)
String padded = """
    line one  \s
    line two   \s
    """;

// \ (backslash at end of line) joins lines in source but keeps them as one
String poem = """
    Roses are red, \
    violets are blue.
    """;
System.out.println(poem); // Roses are red, violets are blue.

ข้อมูลอ้างอิง String.format

ตัวระบุรูปแบบสำคัญสำหรับ String.format:

  • %s — String
  • %d — จำนวนเต็ม
  • %f — จำนวนทศนิยม
  • %.2f — ทศนิยม 2 ตำแหน่ง
  • %n — การขึ้นบรรทัดใหม่ของแพลตฟอร์ม
  • %x — เลขฐานสิบหก
  • %10d — จัดชิดขวาภายในอักขระ 10 ตำแหน่ง
System.out.printf("%s | %d | %.2f | %X%n", "Item", 42, 9.99, 255);
// Item | 42 | 9.99 | FF

String formatted = String.format("%-20s %6.2f%n", "Mechanical Keyboard", 129.95);
System.out.print(formatted);
// Mechanical Keyboard 129.95

// Named format with text block
System.out.printf("""
    Order: %s
    Total: $%.2f
    Status: %s%n""", "ORD-001", 99.99, "SHIPPED");

stripIndent และ translateEscapes ของบล็อกข้อความ

เมธอด String สองรายการทำงานร่วมกับบล็อกข้อความ ได้แก่ stripIndent() ซึ่งลบช่องว่างนำหน้าที่เหมือนกัน และ translateEscapes() ซึ่งประมวลผลลำดับหลีกใน String ขณะทำงาน

String raw = "  hello\\n  world";
System.out.println(raw);                    // hello\n  world
System.out.println(raw.translateEscapes()); // hello (newline) world

// stripIndent removes common leading whitespace
String indented = "    line 1\n    line 2\n    line 3";
System.out.println(indented.stripIndent()); // line 1\nline 2\nline 3

การใช้งานจริง: แม่แบบอีเมล HTML

สร้างแม่แบบอีเมล HTML ที่รับพารามิเตอร์ด้วยบล็อกข้อความ

static String buildWelcomeEmail(String name, String activationLink) {
    return """
        <!DOCTYPE html>
        <html>
          <body>
            <h1>Welcome, %s!</h1>
            <p>Click the link below to activate your account:</p>
            <a href="%s">Activate Account</a>
          </body>
        </html>
        """.formatted(name, activationLink);
}

System.out.println(buildWelcomeEmail("Alice",
    "https://app.example.com/activate?token=abc123"));

บล็อกข้อความเทียบกับ String.join

สำหรับรายการองค์ประกอบ String.join หรือ Collectors.joining ยืดหยุ่นกว่าบล็อกข้อความ โปรดใช้บล็อกข้อความสำหรับเนื้อหาหลายบรรทัดแบบคงที่ และใช้ join สำหรับรายการแบบไดนามิก

import java.util.*;
import java.util.stream.*;

List<String> features = List.of("Unlimited storage", "Priority support", "AI assistant");

// Dynamic list: join
String bullet = features.stream()
    .map(f -> "  • " + f)
    .collect(Collectors.joining("\n"));
System.out.println(bullet);
// • Unlimited storage
// • Priority support
// • AI assistant

// Fixed template: text block + formatted
String plan = """
    PRO Plan — $29/month
    Features:
    %s
    """.formatted(bullet);
System.out.println(plan);

ตรวจสอบอย่างรวดเร็ว

ตำแหน่งของ """ ปิดควบคุมสิ่งใดในบล็อกข้อความ

สรุป: บล็อกข้อความและ String.format

ประเด็นสำคัญ:

  • บล็อกข้อความ (Java 15 ขึ้นไป) ใช้เครื่องหมายอัญประกาศสามตัวและรักษาโครงสร้างหลายบรรทัดโดยไม่ต้องใช้ลำดับหลีก
  • ช่องว่างนำหน้าที่เหมือนกันจะถูกตัดโดยอัตโนมัติตามตำแหน่งของ \"\"\" ปิด
  • เครื่องหมายอัญประกาศคู่ภายในบล็อกข้อความไม่จำเป็นต้องใช้ลำดับหลีก
  • ใช้ .formatted() กับบล็อกข้อความเพื่อสร้างแม่แบบที่รับพารามิเตอร์
  • ตัวระบุของ String.format ได้แก่ %s, %d, %.2f, %n, %x รวมถึงแฟล็กความกว้างและการจัดแนว
  • ใช้ \s ท้ายบรรทัดเพื่อรักษาช่องว่างท้ายบรรทัด และใช้ \ ท้ายบรรทัดเพื่อเชื่อมบรรทัด

คำถามที่พบบ่อย

บทเรียน “บล็อกข้อความและ String.format” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “บล็อกข้อความและ String.format” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Java Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Java Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “บล็อกข้อความและ String.format”

เขียนสตริงหลายบรรทัดด้วยบล็อกข้อความ และจัดรูปแบบข้อมูลด้วยรูปแบบ String.format คุณปฏิบัติ Java Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Java Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Java Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน

บทเรียน “บล็อกข้อความและ String.format” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Java Academy นี้ได้ไหม

ได้ บทเรียน Java Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. ความไม่เปลี่ยนแปลงของ String และ String Pool
  2. StringBuilder สำหรับการต่อสตริงอย่างมีประสิทธิภาพ
  3. บล็อกข้อความและ String.format
  4. นิพจน์ทั่วไปด้วย Pattern และ Matcher
← กลับไปที่ Java Academy