给定一个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
哪位还能再优化一下那个正则表达式

解决方案 »

  1.   

    0 false 为什么这个是 false?
      

  2.   

    public class Test5 {
        
        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();
        }
    }
      

  3.   

    这两天有事就没回复,Sorry0 false为什么这个是 false?0 非浮点数,不需要处理,唯一的要求就是符合浮点数格式的字符串要处理,其他的就不处理了。
    正则表达式仅能限定浮点数的格式,但不能限定浮点数的范围!浮点数的范围在系统中不需要控制(能保证范围合法)。看了火龙果的正则,  "[+-]?(?:[0-9]+\\.[0-9]*|\\.[0-9]+)(?:[eE][+-]?[0-9]+)?"    开始的[+-]?  为什么不写成Reluctant  [+-]??
        
        非捕获组,为什么用此方式,不太清楚意图 ?_?  本人水平有限,请见谅