Java中用正则表达式表示实数的方法,满足以下条件
我试图通过使用java模式类和Matcher类来表示一个实数(0.323、1、4、-123、0、-234.43等等) 但我们有几个条件Java中用正则表达式表示实数的方法,满足以下条件,java,regex,Java,Regex,我试图通过使用java模式类和Matcher类来表示一个实数(0.323、1、4、-123、0、-234.43等等) 但我们有几个条件 当数字为正数时省略+符号(因此只有-符号) 当0位于小数点后几位时,省略0 ex)123.032130000→ 123.03213 当小数点为整数时,省略小数点 ex)123.00→ 123 与2类似,在整数前面省略0 ex)001243→ 1243 数字0前面不允许有符号 ex)-0和+0→ 0 所以我的答案是 但我有个问题。 我没有计算“-0.xxxx”的案
那么,有没有办法不使用分隔符来表示正则表达式???以下是您给出的示例:
([1-9]+)(\[0]+[1-9]+)?
有时最简单的方法是将您的意思编码为:
- 零本身,或
- 可能是有符号的零,后跟小数点和不以零结尾的数字,或
- 可能是不以零开头的有符号数字序列,可选后跟小数点和不以零结尾的数字
String pattern = "^"
+ "0"
+ "|-?0\\.[0-9]*[1-9]"
+ "|-?[1-9][0-9]*(\\.[0-9]*[1-9])?"
+ "$";
Matcher matcher = Pattern.compile(pattern).matcher(validNumber);
boolean validNumber = matcher.matches();
// You don't actually need an explicit Matcher at all:
//boolean validNumber = inputString.matches(pattern);
你的正则表达式看起来很好!为什么不使用分隔符?为什么不添加另一个组,如“
”^-(?:[1-9][0-9]*| 0)(?:\\.[0-9]*[1-9])?$”
?查看@WiktorStribiżew您的建议允许-0
好吧,^(-0$)-(?:[1-9][0-9]*\1240)(?:\.[0-9]*[1-9])?$
。在您的情况下,-0.xxxx无法匹配…包括0.xxxxxx只需在开头添加一个[1-9]*[0-9]
。此外,例如,在十进制分隔符之后必须允许有更多的零来匹配1.00005
。
String pattern = "^"
+ "0"
+ "|-?0\\.[0-9]*[1-9]"
+ "|-?[1-9][0-9]*(\\.[0-9]*[1-9])?"
+ "$";
Matcher matcher = Pattern.compile(pattern).matcher(validNumber);
boolean validNumber = matcher.matches();
// You don't actually need an explicit Matcher at all:
//boolean validNumber = inputString.matches(pattern);