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

题目描述:

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

Java源码实现:

public class Solution {
    public boolean isNumeric(char[] str) {
        if (str == null || str.length == 0) return false;
       // 1.判断符号位(+、-)
        boolean isNegative = false; // 判断str[0]代表的是+还是—,默认为正数
        boolean isSignBit = false; // 判断str[0]是否为符号位
        if (str[0] == '+' || str[0] == '-') {
            isSignBit = true;
            if (str[0] == '-') isNegative = true;
        }
       // 2.去除符号位后,如果字符串长度为1,且为'.'则不是数字
       if (str.length == 1 && !(str[0] >= '0' && str[0] <= '9')) return false;
       if (str.length == 2 && isSignBit && !(str[1] >= '0' && str[1] <= '9')) return false;
        // 3.循环整个字符数组,判断边界值
       int i =  isSignBit ? 1 : 0;
       int dot = 0;
       int e = 0;
       for (;i < str.length;i++) {
          if (str[i] >= '0' && str[i] <= '9') ;
          else if (str[i] == '.') {
             dot++;
             if (dot > 1 || e > 0) return false; // 1.2.3 12e+4.3
          } else if (str[i] == 'e' || str[i] == 'E') {
             e++;
             if (i + 1 == str.length || e > 1 || i == 1 && str[0] == '.') return false;//12e  23e34e  .e1
             else if (str[i+1] == '+' || str[i+1] == '-') {
                if (i + 2 == str.length)  return false; // 12e+
             }
          } else if (str[i] == '+' || str[i] == '-') {
             if (i + 1 == str.length)  return false; // 12+
             else if (e == 0) return false; // 1+34
          } else return false; // 1a3.14
       }
       return true;
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值