《剑指offer》 字符串第八题: 表示数值的字符串

2024-01-03 09:22:25

题目描述:

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

思路:

一个字符串只能出现一次e,且e不是最后一位; 小数点只能出现一次 ; +/- 只能在头/尾/e之后

而小数点只能出现在e前,如果出现在e后也就是指数部分,那么是错的,返回false。

代码实现

package 字符串;
class Stringlcz
{

    public boolean solution(String s)
    {

        if(s==null)
            return false;

        boolean sign=false,decimal=false,hasE=false;  //标记符号、小数点、指数符号E是否出现过

        for(int i=0;i<s.length();i++)
        {
            if(s.charAt(i)=='e'||s.charAt(i)=='E')  //E不能是最后一位,后面必须跟指数
            {
                if(i==s.length()-1)
                    return false;
                if(hasE)          //E只能出现一次
                    return false;
                hasE=true;
            }

            else if(s.charAt(i)=='.')
            {
                if(hasE||decimal)     //注意hasE如果是true,表示前面已经出现过e了,后面不能跟小数点了
                    return false;
                decimal=true;
            }

            else if(s.charAt(i)=='+'||s.charAt(i)=='-')
            {
                if(!sign&&i!=0&&s.charAt(i-1)!='e'&&s.charAt(i-1)!='E')       //!sign:保证在之前没有出现过正负号,确保正负号只出现一次。
                    return false;
                if(sign&&s.charAt(i-1)!='E'&&s.charAt(i-1)!='e')
                    return false;
                sign=true;
            }

            else if(s.charAt(i)>'9'||s.charAt(i)<'0')
                return false;
        }
        return true;

    }

    public static void main(String[] args) {
        Stringlcz l=new Stringlcz();

        String s="-100";
        String s1="12e+4.3";
        String s2="1.23e4";
        String s3="-789.01234";
        String s4="+-12";
        String s5="12E-4";

        System.out.println(l.solution(s));
        System.out.println(l.solution(s1));
        System.out.println(l.solution(s2));
        System.out.println(l.solution(s3));
        System.out.println(l.solution(s4));
        System.out.println(l.solution(s5));
    }
}

运行结果:

文章来源:https://blog.csdn.net/y6533/article/details/135352618
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。