题目
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。
下面是我写的正则,请问错的哪了


String s="\\(\\(\\+|-\\)?\\d+\\)|\\(\\(\\+|-\\)?\\d+\\(e|E\\)\\(\\+|-\\)?\\d+\\)|\\(\\(\\+|-\\)?\\d+\\.\\d+\\)";

解决方案 »

  1.   

    如果“+++-9”算是的话正则应该这么写String s="[+,-]*\\d*[a,e]?\\d*[.]?\\d*[+,-]?\\d*[a,e]?\\d*[.]?\\d*";
    如果不算的话String s="[+,-]?\\d*[a,e]?\\d*[.]?\\d*[+,-]?\\d*[a,e]?\\d*[.]?\\d*";就是这样
    正则里面没有或这种关键子应该这样写[+,-]
      

  2.   

    只是实现功能的话,直接调用工具方法就行了import java.util.Optional;import com.google.common.collect.ImmutableList;
    import com.google.common.primitives.Doubles;public class Test {
    public static void main(String... args) {
    String[] ss = new String[] { "+100", "5e2", "-123", "3.1416", "-1E-16" , "hello" };
    ImmutableList.copyOf(ss).stream().map(s -> Optional.ofNullable(Doubles.tryParse(s)).isPresent()).forEach(System.out::println);
    }
    }
      

  3.   


    public class Test{
    public static void main(String[] args){
    String[] numbers = {"+100","5e2","-123","3.1416","-1E-16","12e","1a3.14","1.2.3","+-5","12e+4.3"};
    for(String number : numbers){
    System.out.printf("'%s' %s number.\n",number,valid(number) ? "is" : "is not");
    }
    } private static boolean valid(String number){
    String regex = "[+-]?\\d+(\\.\\d+)?([Ee]\\d+)?";
    return number.matches(regex);
    }
    }