54表示数值的字符串

Posted Scarlett meng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了54表示数值的字符串相关的知识,希望对你有一定的参考价值。

1、

题目:请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。


例子说明

  例如,字符串“+100”,“5e2”,“-123”,“3.1416”及”-1E-16”都表示数值,但“12e”,”1a3.14”,”1.2.3”,”+-5”及“12e+5.4”都不是。 
  

解题思路

  在数值之前可能有一个表示正负的’-‘或者’+’。接下来是若干个0到9的数位表示数值的整数部分(在某些小数里可能没有数值的整数部分)。如果数值是一个小数,那么在小数点后面可能会有若干个0到9的数位表示数值的小数部分。如果数值用科学计数法表示,接下来是一个’e’或者‘E’,以及紧跟着的一个整数(可以有正负号)表示指数。 
  判断一个字符串是否符合上述模式时,首先看第一个字符是不是正负号。如果是,在字符串上移动一个字符,继续扫描剩余的字符串中0到9的数位。如果是一个小数,则将遇到小数点。另外,如果是用科学计数法表示的数值,在整数或者小数的后面还有可能遇到’e’或者’E’。

package bishi;
public class isNumeric {
    
     public static boolean isNumeric(char[] str) {

            /**
            **思路:1、可能是正负号
            **2、然后是可能是整数,整数有多少位
            *3、有“.”是小数,后面接整数,整数有n位
            *4、可能有e或E,后面可接+-,然后是若干位整数
            */
            
            if(str == null || str.length == 0) {
                return false;
            }
            int i  = 0;
            //判断正负号
            if(str[0] == ‘+‘ || str[0] == ‘-‘){
                i++;
            }
            //是否只有正负号
            if(i == str.length){
                return false;
            }
          //判断是否为整数及整数个数
            boolean isNumeric = true;
            i = isNumber(str, i);
          
            if(i < str.length){            
                  
                if(str[i] == ‘.‘){//1、是小数
                    
                    i++;
                    i = isNumber(str, i);

                    if(i < str.length &&(str[i] == ‘e‘ || str[i] == ‘E‘)){
                        isNumeric = isExp(str, i);
                    }
                } else if (str[i] == ‘e‘ || str[i] == ‘E‘){//2.是整数
                    isNumeric = isExp(str, i);
                } else{//都不是
                    isNumeric = false;
                }
                
                
            } 
            return isNumeric;

        }

    private static boolean isExp(char[] str, int i) {
        // TODO Auto-generated method stub
        if(str[i] != ‘e‘ || str[i] != ‘E‘){
            return false;
        }
        i++;
        //可能有+-
        if(str[i] == ‘+‘ || str[i] == ‘-‘){
            i++;
        }
        //只有+-
        if(i == str.length){
            return false;
        }
        //可能有数字
        i = isNumber(str, i);
        if(i == str.length){
            return true;
        }
        return false;
    }

    private static int isNumber(char[] str, int i) {
        // TODO Auto-generated method stub
        while(i < str.length && str[i] >= ‘0‘ && str[i] <=‘9‘ ){
            i++;
        }
        return i;
    }
    
      public static void main(String[] args) {
            System.out.println(isNumeric("100".toCharArray()) + "[" + true + "]");
            System.out.println(isNumeric("123.45e+6".toCharArray()) + "[" + true + "]");
            System.out.println(isNumeric("+500".toCharArray()) + "[" + true + "]");
            System.out.println(isNumeric("5e2".toCharArray()) + "[" + true + "]");
            System.out.println(isNumeric("3.1416".toCharArray()) + "[" + true + "]");
            System.out.println(isNumeric("600.".toCharArray()) + "[" + true + "]");
            System.out.println(isNumeric("-.123".toCharArray()) + "[" + true + "]");
            System.out.println(isNumeric("-1E-16".toCharArray()) + "[" + true + "]");
            System.out.println(isNumeric("100".toCharArray()) + "[" + true + "]");
            System.out.println(isNumeric("1.79769313486232E+308".toCharArray()) + "[" + true + "]");
            System.out.println();

            System.out.println(isNumeric("12e".toCharArray()) + "[" + false + "]");
            System.out.println(isNumeric("1a3.14".toCharArray()) + "[" + false + "]");
            System.out.println(isNumeric("1+23".toCharArray()) + "[" + false + "]");
            System.out.println(isNumeric("1.2.3".toCharArray()) + "[" + false + "]");
            System.out.println(isNumeric("+-5".toCharArray()) + "[" + false + "]");
            System.out.println(isNumeric("12e+5.4".toCharArray()) + "[" + false + "]");
        }

}

http://blog.csdn.net/derrantcm/article/details/46825671

 

以上是关于54表示数值的字符串的主要内容,如果未能解决你的问题,请参考以下文章

54题

剑指Offer-代码的完整性面试题20:表示数值的字符串

2021-12-24:划分字母区间。 字符串 S 由小写字母组成。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。返回一个表示每个字符串片段的长度的列表。 力扣763。某大厂面试

剑指offer--20表示数值的字符串

剑指offer---表示数值的字符串

表示数值的字符串