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 ถ้าต้องการโครง
[...] - กรองชิ้นว่างก่อนถ้าจำเป็น