如何通过Scanner.useRadix()在读取控制台输入时自动识别并解析十六进制或二进制数据?
- 内容介绍
- 相关推荐
本文共计581个文字,预计阅读时间需要3分钟。
使用Scanner类的useRadix方法可以自动按指定进制解析输入的整数,无需手动调用parseInt方法。此功能只影响具有进制感知的方法,如nextByte、nextInt、nextLong等,对next或nextLine方法无效。必须在读取前设置。
设置进制后直接读取十六进制数
调用 useRadix(16) 后,nextInt() 会把输入(如 "FF"、"a1"、"0x1F")当作十六进制解析——注意:Scanner 默认不识别 "0x" 前缀,输入需为纯十六进制数字(如 "FF"),否则抛出 InputMismatchException。
- 正确输入示例:
FF→ 解析为 255;dead→ 解析为 57005 - 错误输入示例:
0xFF或0x1A会失败,因为 Scanner 不跳过 "0x" - 使用前务必检查输入合法性,或用 try-catch 捕获异常
读取二进制数据需显式设为 radix=2
二进制同理,调用 useRadix(2) 后,nextInt() 只接受由 '0' 和 '1' 组成的字符串:
- 输入
1010→ 解析为 10 - 输入
1102或0b101会报错(含非法字符或前缀) - 若用户习惯输 "0b...",建议先用
next()读字符串,再手动截掉前缀后 parseInt
进制设置是 Scanner 实例级别的,需按需重置
同一个 Scanner 对象多次读取不同进制数据时,必须每次读取前调用 useRadix() 切换:
- 比如先读一个十六进制数:
scanner.useRadix(16); int hex = scanner.nextInt(); - 再读一个十进制数:
scanner.useRadix(10); int dec = scanner.nextInt(); - 忘记重置会导致后续读取仍按旧进制解析,极易出错
实用小技巧:封装带进制提示的输入方法
为提升用户体验和健壮性,可封装工具方法:
- 打印提示如 "请输入十六进制数(不含 0x):",再调
useRadix(16)+nextInt() - 捕获 InputMismatchException 并提示格式错误,然后
scanner.nextLine()清空错误输入行 - 读完后主动恢复默认进制(radix=10),避免影响后续逻辑
本文共计581个文字,预计阅读时间需要3分钟。
使用Scanner类的useRadix方法可以自动按指定进制解析输入的整数,无需手动调用parseInt方法。此功能只影响具有进制感知的方法,如nextByte、nextInt、nextLong等,对next或nextLine方法无效。必须在读取前设置。
设置进制后直接读取十六进制数
调用 useRadix(16) 后,nextInt() 会把输入(如 "FF"、"a1"、"0x1F")当作十六进制解析——注意:Scanner 默认不识别 "0x" 前缀,输入需为纯十六进制数字(如 "FF"),否则抛出 InputMismatchException。
- 正确输入示例:
FF→ 解析为 255;dead→ 解析为 57005 - 错误输入示例:
0xFF或0x1A会失败,因为 Scanner 不跳过 "0x" - 使用前务必检查输入合法性,或用 try-catch 捕获异常
读取二进制数据需显式设为 radix=2
二进制同理,调用 useRadix(2) 后,nextInt() 只接受由 '0' 和 '1' 组成的字符串:
- 输入
1010→ 解析为 10 - 输入
1102或0b101会报错(含非法字符或前缀) - 若用户习惯输 "0b...",建议先用
next()读字符串,再手动截掉前缀后 parseInt
进制设置是 Scanner 实例级别的,需按需重置
同一个 Scanner 对象多次读取不同进制数据时,必须每次读取前调用 useRadix() 切换:
- 比如先读一个十六进制数:
scanner.useRadix(16); int hex = scanner.nextInt(); - 再读一个十进制数:
scanner.useRadix(10); int dec = scanner.nextInt(); - 忘记重置会导致后续读取仍按旧进制解析,极易出错
实用小技巧:封装带进制提示的输入方法
为提升用户体验和健壮性,可封装工具方法:
- 打印提示如 "请输入十六进制数(不含 0x):",再调
useRadix(16)+nextInt() - 捕获 InputMismatchException 并提示格式错误,然后
scanner.nextLine()清空错误输入行 - 读完后主动恢复默认进制(radix=10),避免影响后续逻辑

