实现一个函数用来判断字符串是否表示数值

实现一个函数用来判断字符串是否表示数值

题目
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串”+100”,”5e2”,”-123”,”3.1416”和”-1E-16”都表示数值。 但是”12e”,”1a3.14”,”1.2.3”,”±5”和”12e+4.3”都不是。

思路:
设有符号的整数为A,无符号的整数为B,
那么最标准的形式应该是
A . B E/e A
任何一个合法的数字肯定是他的子集按某种意义
.100
190.
-2.9E-2
等等
整个算法大体分为两段判断小数点,以及判断E后面

 public boolean numberic(char a[]) {
        if(a==null){
            return false;//l鲁棒
        }
        boolean numberic;//这个变量代表目前此时这个时候字符串是不是合法的
        int index[] = new int[1];
        index[0] = 0;
        //开始先判断这个数是不是以符号开头
        numberic = isSigned(a, index);//判断是否是有无符号的整数完毕,现在如果后面又小数点或者e需要继续判断
        if(index[0]<a.length&&(a[index[0]]=='.')){
            index[0]++;//需要判断. 后面的东西,此时有几种情况,有 有符号数后面有一个小数点 、 有符号数后面有小数点并且
            //小数点后面还有无符号数 、 开头就是小数点然后是无符号数
            numberic = isUnsigned(a,index)||numberic;//||的左面是代表以小数点开头的情况||右面代表xxx.xxxz这种情况
        }//下面就要判断E的情况
        if(index[0]<a.length&&(a[index[0]]=='E'||a[index[0]]=='e')){
            index[0]++;
            numberic = isSigned(a,index)&&numberic;
        }
        if(numberic&&index[0]==a.length){
            return true;
        }
        return false;



    }

    private boolean isSigned(char[] a, int[] index) {
        if (index[0] < a.length && (a[index[0]] == '+' || a[index[0]] == '-')) {
            index[0]++;
        }//判断符号完毕接下来判断符号后面是不是整数
        return isUnsigned(a, index);


    }

    private boolean isUnsigned(char[] a, int[] index) {
        int start = index[0];
        while (index[0] < a.length && ((a[index[0]] - '0') >= 0 && (a[index[0]] - '0') <= 9)) {
            index[0]++;
        }
        if (index[0] > start) {//代表是整数这一块截至
            return true;
        } else
            return false;
    }

测试:

 void test(String testName, char[] str, boolean expected) {
        System.out.print(testName + ":");
        if (numberic(str) == expected) {
            System.out.println(" passed!");
        }else {
            System.out.println(" failed!");
        }
    }

    void test1() {
        char[] str = null;
        test("test1", str, false);
    }

    void test2() {
        char[] str = {};
        test("test2", str, false);
    }

    void test3() {
        String string ="e3";
        char[] str=string.toCharArray();
        test("test3", str, false);
    }

    void test4() {
        String string ="3e1.2";
        char[] str=string.toCharArray();
        test("test4", str, false);
    }

    void test5() {
        String string ="e3";
        char[] str=string.toCharArray();
        test("test5", str, false);
    }

    void test6() {
        String string ="1.2e3";
        char[] str=string.toCharArray();
        test("test6", str, true);
    }

    void test7() {
        String string ="-.2e3";
        char[] str=string.toCharArray();
        test("test7", str, true);
    }

    void test8() {
        String string ="-.2e-3";
        char[] str=string.toCharArray();
        test("test8", str, true);
    }

    void test9() {
        String string ="1.e-3";
        char[] str=string.toCharArray();
        test("test9", str, true);
    }

    void test10() {
        String string ="1.";
        char[] str=string.toCharArray();
        test("test10", str, true);
    }

    void test11() {
        String string =".2";
        char[] str=string.toCharArray();
        test("test11", str, true);
    }

    void test12() {
        String string ="12e3";
        char[] str=string.toCharArray();
        test("test12", str, true);
    }

    public static void main(String[] args) {
        R demo = new R();
        demo.test1();
        demo.test2();
        demo.test3();
        demo.test4();
        demo.test5();
       demo.test6();
        demo.test7();
        demo.test8();
        demo.test9();
        demo.test10();
        demo.test11();
        demo.test12();
    }


test1: passed!
test2: passed!
test3: passed!
test4: passed!
test5: passed!
test6: passed!
test7: passed!
test8: passed!
test9: passed!
test10: passed!
test11: passed!
test12: passed!

Process finished with exit code 0

上一篇:求出区间[a,b]中所有整数的质因数分解。(Java)(转载)


下一篇:小阳数数 (暴力破解并查集)Java