scanner默认以空白字符分隔,读取逗号分隔字符串需调用usedelimiter("s,s")匹配逗号及周围空格,确保字段干净;设置必须在读取前完成,且为正则表达式,特殊字符需转义。

默认情况下,Scanner 使用空白字符(空格、制表符、换行等)作为分隔符。若想从控制台读入逗号分隔的字符串(比如 "apple,banana,orange"),需调用 useDelimiter() 显式设置分隔符为逗号。
设置逗号为分隔符
调用 scanner.useDelimiter(",") 即可将分隔符改为英文逗号。注意:该方法只影响后续的 next()、hasNext() 等扫描行为,不影响已读取的内容。
- 必须在读取前设置,否则无效
- 分隔符是正则表达式,所以逗号无需转义;但若要用点号
.、星号*等特殊字符,需用\.、\*转义 - 如果输入末尾有逗号(如
"a,b,c,"),最后一个空字段可能被跳过——next()不会返回空字符串,除非配合findInLine()或改用nextLine().split(",")
处理带空格的字段(如 "apple, banana , orange")
单纯设为 "," 会导致字段前后残留空格(如 " banana ")。推荐组合使用正则表达式匹配“逗号 + 可选空白”:
-
scanner.useDelimiter("\s*,\s*")—— 匹配任意数量空格包围的逗号 - 这样
"apple, banana ,orange"会被拆成"apple"、"banana"、"orange",自动清理首尾空格
完整示例:读取并打印逗号分隔的单词
注意:务必在 new Scanner(System.in) 后立即设置分隔符,且避免混用 nextLine() 和 next()(易因换行符导致跳过输入):
Scanner sc = new Scanner(System.in);
sc.useDelimiter("\s*,\s*"); // 支持逗号及周围空格
System.out.print("请输入逗号分隔的单词:");
while (sc.hasNext()) {
String word = sc.next();
System.out.println("→ " + word);
if (sc.hasNext() == false || sc.hasNext("\R")) break; // 防止阻塞
}
sc.close();
输入 cat, dog ,bird 会依次输出三个干净单词。
替代方案与注意事项
对于简单场景,nextLine().split(",") 更直观;但 Scanner 的优势在于可混合读取不同类型(如先读整数再读逗号串)。需注意:
-
useDelimiter()是实例方法,每次新建Scanner都要重新设置 - 若需恢复默认空白分隔,可用
sc.useDelimiter("\s+") - 中文逗号(,)需单独写为
","或用 Unicode:"\uFF0C"










