Java中split()按正则分割、需转义特殊字符,String.join()静态拼接、不支持null;二者非严格互逆,因正则语义、空串处理及limit参数差异。
Java 里没有 join 方法,split 是 String 类的实例方法,但拼接字符串得靠 String.join()(静态方法)或 StringJoiner,不是反向操作。
split 接收一个正则表达式作为分隔符,不是普通字符串。比如想按点号 . 拆分 "a.b.c",直接写 "a.b.c".split("."); 会返回空数组——因为 . 在正则中匹配任意字符。
"a.b.c".split("\\.");
"a,,b".split(",") 返回长度为 3 的数组 ["a", "", "b"];但 "a,,b".split(",", -1) 才保留末尾空串(默认 limit=0 会丢弃结尾空串)-1)表示不限制且保留所有空项;零值(默认)等价于 -1 但会丢弃末尾空字符串String.join() 是静态方法,第一个参数是分隔符,第二个是 Iterable 或可变参数 CharSequence...。它不支持对原始数组直接调用(比如不能 arr.join("-")),也不能传入 null 元素——会抛 NullPointerException。

String.join("-", "a", "b", "c") → "a-b-c"
String.join(",", Arrays.asList(strArray)),或 Java 8+ 直接 String.join(",", strArray)(仅限 String[])null,需先映射处理:Arrays.stream(arr).map(Objects::toString).collect(Collectors.joining(","))
当要动态添加、带前缀/后缀、或避免中间多余的分隔符时,StringJoiner 比反复用 + 或 StringBuilder 更清晰。
StringJoiner sj = new StringJoiner(",", "[", "]");
sj.add("a");
sj.add("b");
sj.add("c");
// 结果:"[a,b,c]"
StringJoiner 不会因空值崩溃,但 add(null) 会加入字符串 "null"
String.join() 灵活,但没后者简洁别指望 split 和某个方法能完全互逆——正则语义、空串处理、limit 行为、null 安全性,每一步都有隐含规则。实际写的时候,先明确输入是否含特殊字符、是否有连续/首尾分隔符、要不要保留空段,再选对应参数或换工具。