【leetCode:剑指 Offer】20. 表示数值的字符串

该文章描述了一个用于判断输入字符串是否表示数值(整数或小数)的Java函数。函数通过检查字符串中的符号、数字、小数点和指数(e或E)的位置和格式来确定其是否符合数值的定义。不合法的数值示例包括缺少数字的点或指数等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.题目描述

请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。

数值(按顺序)可以分成以下几个部分:

若干空格
一个 小数 或者 整数
(可选)一个 'e' 或 'E' ,后面跟着一个 整数
若干空格
小数(按顺序)可以分成以下几个部分:

(可选)一个符号字符('+' 或 '-')
下述格式之一:
至少一位数字,后面跟着一个点 '.'
至少一位数字,后面跟着一个点 '.' ,后面再跟着至少一位数字
一个点 '.' ,后面跟着至少一位数字
整数(按顺序)可以分成以下几个部分:

(可选)一个符号字符('+' 或 '-')
至少一位数字
部分数值列举如下:

["+100", "5e2", "-123", "3.1416", "-1E-16", "0123"]
部分非数值列举如下:

["12e", "1a3.14", "1.2.3", "+-5", "12e+5.4"]

2.算法分析

  1. 若干空格
  2. 一个 小数 或者 整数
  3. (可选)一个 'e' 或 'E' ,后面跟着一个 整数
  4. 若干空格

小数:

(可选)一个符号字符('+' 或 '-')
下述格式之一:
至少一位数字,后面跟着一个点 '.'
至少一位数字,后面跟着一个点 '.' ,后面再跟着至少一位数字
一个点 '.' ,后面跟着至少一位数字

整数:

(可选)一个符号字符('+' 或 '-'

   至少一位数字

分析:

①数值,首尾若干空格,那就先去掉空格

②数值,包括小数,整数。

小数小数只有一个点,这个点前面有数字,或者点后面有数字

 'e' 或 'E' ,后面跟着一个 整数

⑤ ' + ',' - ',不能挨着,只是符号 

总结:

① 对每一个字符进行判断,按情况来

②是数值

③是小数点

④e E的判断

3.Java代码实现

class Solution {
    public boolean isNumber(String s) {
        if(s == null || s.length() == 0){
            return false;
        }
        // 遍历每一个字符,对当前字符进行判断,以及前一个字符以及后一个字符
        boolean isNum = false,isDot = false,ise_or_E = false;
        char[] str = s.trim().toCharArray();
        for(int i = 0;i < str.length;i++){
            //判断当前是否是0-9的数位
            if(str[i] >= '0' && str[i] <= '9'){
                // 是数值
                isNum = true;
            }else if(str[i] == '.'){
                // 如果之前有小数点了,或者E,e,那么返回false
                if(isDot || ise_or_E){
                    return false;
                }
                // 设置状态
                isDot = true;
                
            }else if(str[i] == 'e' || str[i] == 'E'){
                if(!isNum || ise_or_E){
                    return false;
                }
                ise_or_E = true;
                isNum = false;
            }else if(str[i] == '-' || str[i] == '+'){
                // 看E,e的情况。
                if(i!=0 && str[i - 1] != 'e' && str[i - 1] != 'E'){
                    return false;
                }
            }else {
                return false;
            }
        } 
        return isNum;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值