นากกายร้อยป้ายชื่อด้วยโซ่คั่นโดยไม่มีโซ่เกินท้าย

Java StringJoiner: ต่อรายการด้วยตัวคั่นโดยไม่เหลือคั่นห้อยท้าย

น้องกายEngineering

การต่อสตริงด้วยลูปแล้วตัดคอมมาตัวท้ายเองพลาดง่าย StringJoiner รับ delimiter และใส่ prefix/suffix ให้ครบโดยไม่เหลือตัวคั่นห้อยครับ

WHY: ไม่มีคอมมาตัวโกงท้ายแถว

เหมือนร้อยป้ายชื่อนักเรียนด้วยห่วงโซ่ — ห่วงอยู่ระหว่างป้าย ไม่ใช่ห้อยท้ายคนสุดท้าย

import java.util.List;
import java.util.StringJoiner;

public class Main {
    static String csv(List<String> parts) {
        StringJoiner joiner = new StringJoiner(",", "[", "]");
        for (String p : parts) joiner.add(p);
        return joiner.toString();
    }

    public static void main(String[] args) {
        assert csv(List.of("a", "b", "c")).equals("[a,b,c]");
        assert csv(List.of()).equals("[]");
        assert csv(List.of("solo")).equals("[solo]");
        System.out.println("StringJoiner verified");
    }
}

HOW: delimiter มาก่อน แล้ว add เป็นชิ้น

คอนสตรักเตอร์หลักรับ delimiter อย่างเดียว หรือครบ delimiter + prefix + suffix เมธอด add รับทีละชิ้น merge รวมจอยเนอร์อีกตัวได้ ถ้าชิ้นมาจาก stream ใช้ Collectors.joining ที่ข้างในพึ่งแนวคิดเดียวกัน

GOTCHA: ค่าว่างก็ยังเป็นชิ้น

add("") จะแทรกชิ้นว่างและอาจได้คอมมาติดกัน ถ้าไม่อยากได้ ให้กรองก่อน add

Recap

  • ใช้ StringJoiner เมื่อไม่รู้จำนวนชิ้นล่วงหน้า
  • ตั้ง prefix/suffix ถ้าต้องการโครง [...]
  • กรองชิ้นว่างก่อนถ้าจำเป็น