scanner.delimiter()不能获取当前分隔符,因其仅为带参重载方法(用于设置),无无参getter;内部delimiter字段私有且不暴露,故需手动维护变量记录。

Java 的 Scanner 类本身**没有提供直接获取当前分隔符正则表达式(delimiter pattern)的公开方法**,其内部使用的 Pattern 是私有的(private Pattern delimiter),且 delimiter() 方法**只用于设置分隔符,不支持无参调用获取当前值**。
为什么 delimiter() 不能用来“获取”当前分隔符?
Scanner.delimiter() 是一个**重载方法**,只有带 Pattern 或 String 参数的版本(用于设置),不存在无参的 getter 版本。这是设计上的限制 —— Scanner 不暴露其内部 delimiter 字段。
如何间接获知当前分隔符?
虽然无法直接读取,但可通过以下方式推断或管理:
-
自己维护分隔符变量:在调用
useDelimiter(...)时,同步保存你传入的正则字符串或Pattern对象。这是最可靠、推荐的做法。 -
检查默认分隔符:未显式设置时,Scanner 默认使用
\p{javaWhitespace}+(即一个或多个 Unicode 空白字符)。可记为常识,无需运行时查询。 -
通过输入行为反推(不推荐):例如用已知输入测试
next()行为,观察是否按预期切分 —— 这属于调试手段,不能程序化获取正则字符串。
正确做法示例:手动跟踪分隔符
✅ 推荐写法(清晰、可控、可调试):
String currentDelim = "\s+"; // 显式记录
Scanner sc = new Scanner(input).useDelimiter(currentDelim);
// 后续需要时直接使用 currentDelim
System.out.println("当前分隔符正则:" + currentDelim);
注意:不要尝试反射获取 private delimiter
虽然技术上可通过反射访问 scanner.getClass().getDeclaredField("delimiter"),但这:
• 违反封装原则
• 依赖内部实现(JDK 版本变动可能失效)
• 在安全管理器或模块化环境下可能被禁止
生产代码中应避免。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











