给定一个string,判断是否为浮点数,不包含整数代码:
package com.regex;import java.util.regex.Pattern;public final class FloatingPointNumber {
private static String regex = "^[-+]??(\\d++[.]\\d*?|[.]\\d+?)([eE][-+]??\\d++)?$";
private static Pattern pattern = Pattern.compile(regex);
private FloatingPointNumber(){}
public static boolean isFPN(String convert){
return pattern.matcher(convert).matches();
}
}
测试:package com.regex;public class TestFPN { public static void main(String[] args) {
double temp = Double.MAX_VALUE;
temp=temp + 1e30;
String a = Double.toString(temp);
String[] converts = {"0.", "0.0", "0.e0", "0.0e0", ".0", ".0e0","0","1e1","21.02121.0",a }; for (String test : converts) {
System.out.println(test + " " + FloatingPointNumber.isFPN(test));
}
}
}结果:
0. true
0.0 true
0.e0 true
0.0e0 true
.0 true
.0e0 true
0 false
1e1 false
21.02121.0 false
1.7976931348623157E308 true
哪位还能再优化一下那个正则表达式
package com.regex;import java.util.regex.Pattern;public final class FloatingPointNumber {
private static String regex = "^[-+]??(\\d++[.]\\d*?|[.]\\d+?)([eE][-+]??\\d++)?$";
private static Pattern pattern = Pattern.compile(regex);
private FloatingPointNumber(){}
public static boolean isFPN(String convert){
return pattern.matcher(convert).matches();
}
}
测试:package com.regex;public class TestFPN { public static void main(String[] args) {
double temp = Double.MAX_VALUE;
temp=temp + 1e30;
String a = Double.toString(temp);
String[] converts = {"0.", "0.0", "0.e0", "0.0e0", ".0", ".0e0","0","1e1","21.02121.0",a }; for (String test : converts) {
System.out.println(test + " " + FloatingPointNumber.isFPN(test));
}
}
}结果:
0. true
0.0 true
0.e0 true
0.0e0 true
.0 true
.0e0 true
0 false
1e1 false
21.02121.0 false
1.7976931348623157E308 true
哪位还能再优化一下那个正则表达式
public final static String regex = "[+-]?(?:[0-9]+\\.[0-9]*|\\.[0-9]+)(?:[eE][+-]?[0-9]+)?";
private static Matcher matcher = Pattern.compile(regex).matcher("");
public static void main(String[] args) {
double temp = Double.MAX_VALUE;
temp=temp + 1e30;
String a = Double.toString(temp);
String[] converts = {"0.", "0.0", "0.e70", "0.0e0", ".0", ".0e0","0","1e1","21.02121.0",a, "."}; for (String test : converts) {
System.out.println(test + " " + isFpn(test));
}
}
public static boolean isFpn(String floatPointNumber) {
if(floatPointNumber == null || floatPointNumber.length() == 0) {
return false;
}
return matcher.reset(floatPointNumber).matches();
}
}
正则表达式仅能限定浮点数的格式,但不能限定浮点数的范围!浮点数的范围在系统中不需要控制(能保证范围合法)。看了火龙果的正则, "[+-]?(?:[0-9]+\\.[0-9]*|\\.[0-9]+)(?:[eE][+-]?[0-9]+)?" 开始的[+-]? 为什么不写成Reluctant [+-]??
非捕获组,为什么用此方式,不太清楚意图 ?_? 本人水平有限,请见谅