表示数值的字符串

时间:2022-11-04 21:49:30

表示数值的字符串
字符串是否是数字

public class Solution {

    //(1)使用库
    public boolean isNumeric(char[] str) {
       if(str==null||str.length==0)
           return false;
        try{
          double d=Double.parseDouble(new String(str));

        }catch(Exception e)
        {
             return false;
        }

       return true;  
    } 
    //(2)匹配法
    public boolean isNumeric(char[] str) {  String string = String.valueOf(str);
        return string.matches("[\\+\\-]?\\d*(\\.\\d+)?([eE][\\+\\-]?\\d+)?");
    }
}
/* 以下对正则进行解释: [\\+\\-]? -> 正或负符号出现与否 \\d* -> 整数部分是否出现,如-.34 或 +3.34均符合 (\\.\\d+)? -> 如果出现小数点,那么小数点后面必须有数字; 否则一起不出现 ([eE][\\+\\-]?\\d+)? -> 如果存在指数部分,那么e或E肯定出现,+或-可以不出现, 紧接着必须跟着整数;或者整个部分都不出现 */

//参见剑指offer
public class Solution {
    private int index = 0;

    public boolean isNumeric(char[] str) {
        if (str.length < 1)
            return false;

        boolean flag = scanInteger(str);

        if (index < str.length && str[index] == '.') {
            index++;
            flag = scanUnsignedInteger(str) || flag;
        }

        if (index < str.length && (str[index] == 'E' || str[index] == 'e')) {
            index++;
            flag = flag && scanInteger(str);
        }

        return flag && index == str.length;

    }

    private boolean scanInteger(char[] str) {
        if (index < str.length && (str[index] == '+' || str[index] == '-') )
            index++;
        return scanUnsignedInteger(str);

    }

    private boolean scanUnsignedInteger(char[] str) {
        int start = index;
        while (index < str.length && str[index] >= '0' && str[index] <= '9')
            index++;
        return start < index; //是否存在整数
    }

    public static void main(String[]args){
         System.out.println("Hello");
    }
}