我正在使用 Scanner 对象扫描文本,比如说lineScanner
. 以下是声明:
String myText= "200,00/100,00/28/65.36/21/458,696/25.125/4.23/6.3/4,2/659845/4524/456,65/45/23.495.254,3";
Scanner lineScanner = new Scanner(myText);
有了这个Scanner
,我想找到第一个BigDecimal
,然后找到第二个,依此类推。我宣布 aBIG_DECIMAL_PATTERN
匹配任何情况。
以下是我定义的规则:
- 千位分隔符后始终紧跟 3 位数字
- 小数点后总是正好有 1 或 2 位数字。
- 如果千位分隔符是逗号符号,那么小数点是点符号,反之亦然
- 千位分隔符是可选的,作为数字的小数部分
String nextBigDecimal = lineScanner.findInLine(BIG_DECIMAL_PATTERN);
现在,这是BIG_DECIMAL_PATTERN
我声明的:
private final String BIG_DECIMAL_PATTERN=
"\\d+(\\054\\d{3}+)?(\\056\\d{1,2}+)?|\\d+(\\056\\d{3}+)?(\\054\\d{1,2}+)?)";
\\054
是 ASCII 八进制表示","
\\056
是 ASCII 八进制表示"."
我的问题是它不能很好地工作,因为当第一部分的模式被发现时,第二部分(在 之后|
)没有被检查,在我的例子中,第一个匹配将是200
而不是200,00
。所以我可以试试这个:
private final String BIG_DECIMAL_PATTERN=\\d+([.,]\\d{3}+)?([,.]\\d{1,2}+)?
但是有一个新的问题:逗号和点不是互斥的,我的意思是如果一个是千位分隔符,小数点应该是另一个。
感谢您的帮助。