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

来源:互联网 发布:ichat for mac 编辑:程序博客网 时间:2024/05/29 17:15

题目描述

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

解析
对于java有多种方法,这里首先提供一般的方法:分类处理

在牛客网上还看到各种解法,虽然都是依靠java强大的函数库或者是java自己的一些特性,有些投机取巧的意味,但也反映了思路的灵活性。

1、一般方法

public class Solution {    boolean isNumeric(char[] s) {        if(s.length==0) return false;        if((s.length==1)&&(s[0]<'0'||s[0]>'9')) return false;        if(s[0]=='+'||s[0]=='-'){            if(s.length==2&&(s[1]=='.')) return false;        }else if((s[0]<'0'||s[0]>'9')&&s[0]!='.') return false;//首位既不是符号也不是数字还不是小数点,当然是false        int i = 1;        while((i<s.length)&&(s[i]>='0'&&s[i]<='9')) i++;        if(i<s.length&&s[i]=='.'){            i++;            //if(i>=s.length) return false;            while((i<s.length)&&(s[i]>='0'&&s[i]<='9')) i++;        }        if(i<s.length&&(s[i]=='e'||s[i]=='E')){            i++;            if((i<s.length)&&(s[i]=='+'||s[i]=='-')){                i++;                if(i<s.length) while((i<s.length)&&(s[i]>='0'&&s[i]<='9')) i++;                else return false;            }else if(i<s.length){                while((i<s.length)&&(s[i]>='0'&&s[i]<='9')) i++;            }else return false;        }        if(i<s.length) return false;                    return true;            }}

2、正则表达式

public class Solution {    public boolean isNumeric(char[] str) {        String string = String.valueOf(str);        return string.matches("[\\+-]?[0-9]*(\\.[0-9]*)?([eE][\\+-]?[0-9]+)?");    }}

3、借助java的异常处理类

public class Solution {    public boolean isNumeric(char[] str) {        try {            double re = Double.parseDouble(new String(str));        } catch (NumberFormatException e) {            return false;        }        return true;    }}
0 0
原创粉丝点击