Java教程

JZ53 表示数值的字符串

本文主要是介绍JZ53 表示数值的字符串,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

原题链接


描述

请实现一个函数用来判断字符串str是否表示数值(包括科学计数法的数字,小数和整数)。


示例

输入:"123.45e+6"
返回值:true

思路

从头依次遍历,针对各种情况设置符号标志,乍一看比较简单的但是细节很多,一不小心就会遗漏一些。有些会被认为不是数值的输入也会返回 true,主要有"1." ".1"


解答

package com.klaus.math.prob53;

public class Solution {

    public boolean isNumeric(String str) {

        int context = 0;// 是否有意义的内容
        int token = 0;
        int before = 0;//点前面的位数
        int point = 0;
        int after = 0;// 点后面的位数
        int e = 0;

        for (int i = 0; i < str.length(); ++i) {
            // 空格
            if (str.charAt(i) == ' ') {
                --context;
            }
            // 正负号
            else if (str.charAt(i) == '+' || str.charAt(i) == '-') {
                // 幂符号
                if (i == 0) {
                    ++token;
                }
                // 指数符号
                else if (str.charAt(i - 1) == 'e' || str.charAt(i - 1) == 'E') {
                    ++token;
                } else
                    return false;
                if (token > 1) return false;
            }
            // e
            else if (str.charAt(i) == 'e' || str.charAt(i) == 'E') {
                if (before == 0)
                    return false;
                ++e;
                if (e > 1)
                    return false;
                token = 0;
                point = 1;
            }
            // 小数点
            else if (str.charAt(i) == '.') {
                point++;
                after = 0;
                if (point > 1)
                    return false;
            }
            // 数字
            else if (str.charAt(i) >= '0' && str.charAt(i) <= '9') {
                if (point == 0) {
                    before++;
                    after++;
                } else
                    after++;
            } else {
                return false;
            }
            ++context;
        }

        // 如果没有点
        if (e == 1 && after == 0)
            return false;

        if (token == 1 && after == 0)
            return false;

        if (context <= 0)
            return false;

        if (point == 1 && after == 0 && before == 0)
            return false;

        return true;
    }
}
这篇关于JZ53 表示数值的字符串的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!