Java计算器如何无需显式分隔符自动拆分输入?
解决Scanner拆分无空格表达式的问题
不用大幅重构现有代码的话,核心就是修改Scanner的分隔符规则,让它能自动在数字和运算符之间分割,同时保留运算符作为独立token。
- 关键修改:给Scanner设置自定义分隔符,使用正则表达式匹配空白字符或者数字与运算符的边界,兼容带空格和无空格的两种输入格式。
具体代码修改如下:
// 替换原来的Scanner初始化代码 Scanner scanner = new Scanner(System.in).useDelimiter("(?<=[-+*/])|(?=[-+*/])|\\s+");
正则表达式解释:
(?<=[-+*/]):正向回顾断言,匹配在+、-、*、/这些运算符之后的位置,确保运算符被单独拆分出来(?=[-+*/]):正向预查断言,匹配在运算符之前的位置,确保运算符前的数字被单独拆分\\s+:匹配一个或多个空白字符,完全兼容你原来处理带空格输入的逻辑
效果验证:
输入5+32 *2时,调用scanner.next()会依次得到以下token:"5"、"+"、"32"、"*"、"2",和你原来处理带空格输入的token顺序、类型完全一致,现有处理数字和运算符的逻辑无需改动。
扩展说明:
如果你的计算器支持其他运算符(比如取余%),只需把运算符加到正则的字符组里即可,比如改成"(?<=[-+*/%])|(?=[-+*/%])|\\s+"。
内容的提问来源于stack exchange,提问作者Sergey Zolotarev
相关产品推荐
相关产品推荐

