
stringtokenizer支持多字符分隔符,只需将逗号(`,`)和换行符(`\n`)合并为一个字符串(如`",\n"`)传入构造函数,即可同时按两者切分字符串,无需正则或额外预处理。
StringTokenizer 的第二个构造参数接受一个分隔符集合(delimiter set),它会将该字符串中的每个字符都视为独立的分隔符,而非将其当作整体子串匹配。因此,传入 ",\n" 并非表示“先逗号后换行”的组合,而是告诉 StringTokenizer:遇到 , 或 \n 中的任意一个字符,就进行一次分割。
这意味着以下所有情况均会被正确识别为分隔位置:
- 单独的 ,(如 "apple,tree" → "apple", "tree")
- 单独的 \n(如 "wolf\neagle" → "wolf", "eagle")
- 相邻出现的 , 和 \n(如 "tree,\nwolf" → "tree", "wolf")
- 甚至 \n,\n 或 ,,\n 等连续分隔符也会被统一视为空白分隔,自动跳过空 token(除非显式启用 returnDelims = true)。
✅ 正确用法示例:
String data = "hello apple, tree, wolf\neagle\nbadge";
StringTokenizer tokens = new StringTokenizer(data, ",\n"); // ✅ 同时指定逗号与换行符
while (tokens.hasMoreTokens()) {
String token = tokens.nextToken().trim(); // 建议 trim() 去除首尾空格
System.out.println("[" + token + "]");
}输出结果(已 trim):
[hello apple] [tree] [wolf] [eagle] [badge]
⚠️ 注意事项:
- StringTokenizer 不支持正则表达式,因此 ",\\n" 或 ",\r?\n" 等写法无效;若需更复杂的分隔逻辑(如仅匹配 ,\n 组合、忽略单独换行),应改用 String.split() 配合正则(例如:line.split(",\\s*|\\s*\\n\\s*"))。
- Windows 系统文本中换行符常为 \r\n,若需兼容,建议先对原始字符串执行 str.replace("\r\n", "\n").replace("\r", "\n"),再传入 StringTokenizer。
- StringTokenizer 是遗留类(legacy),官方文档推荐优先使用 String.split() 或 java.util.Scanner;但若项目受限于旧环境或追求轻量无正则依赖,StringTokenizer 仍可靠高效。
总结:要同时以逗号和换行符分隔,只需 new StringTokenizer(line, ",\n") —— 简洁、有效、无需额外依赖。










