表示数值的字符串(含思路解答示意图)【剑指offer——JAVA实现】

2023-11-19

题目描述

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


【解法一】

思路:状态机实现,如下图所示


代码实现

public class Solution {
    public boolean isNumeric(char[] str) {
        
        //使用状态机求解
        int i = 0;
        //首字符合法性
        if(i < str.length &&(str[i] == '+' || str[i] == '-' || str[i] == '.' || isNum(str[i]))){
            //数字遍历
            while((++i < str.length) && isNum(str[i]));
            if(i == str.length){
                //如果遍历完成
                return true;
            } else if(str[i] == '.'){
                //数字遍历
                while((++i < str.length) && isNum(str[i]));
                if(i == str.length){
                    //如果遍历完成
                    return true;
                } else if (str[i] == 'e' || str[i] == 'E'){
                    i++;
                    if(i < str.length &&(str[i] == '+' || str[i] == '-' || isNum(str[i]))){
                        //数字遍历
                        while((++i < str.length) && isNum(str[i]));
                        if(i == str.length)
                            return true;
                        else 
                            return false;
                    } else {
                        return false;
                    }
                } else 
                    return false;
            } else if(str[i] == 'e' || str[i] == 'E'){
                i++;
                if(i < str.length &&(str[i] == '+' || str[i] == '-' || isNum(str[i]))){
                    //数字遍历
                    while((++i < str.length) && isNum(str[i]));
                    if(i == str.length)
                        return true;
                    else 
                        return false;
                } else {
                    return false;
                }
            } else
                return false;
        } else
            return false;
    }

    private boolean isNum(char str) {
        if(str >= '0' && str <= '9') {
            return true;
        } else
            return false;
    }
}

【解法2】

思路:使用正则表达式

代码实现

public class Solution {
    public boolean isNumeric(char[] str) {
        //使用正则表达式
        String s = String.valueOf(str);
        return s.matches("[+-]?[0-9]*(\\.[0-9]*)?([eE][+-]?[0-9]+)?");
    }
}
正则表达式的规则这里就不介绍啦~只能说正则表达式好强大!

更多算法解答请点击 《剑指offer》66题JAVA代码算法实现全集


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

表示数值的字符串(含思路解答示意图)【剑指offer——JAVA实现】 的相关文章

  • mysql基本数据类型

    概述 要想学好mysql 了解其支持的基本数据类型以及内部原理是极为重要的 只有这样 我们才能根据不同的业务要求来选择不同的数据类型 实现最佳的存储效果和查询性能 因而本文就着重总结一下mysql支持的数据类型以及内部的存储原理 总体来说
  • js 字符串与二维数组间的转化

    1 字符串转二维数组 var a 1 2 3 4 5 a b c d e y1 y2 y3 y4 y5 var str eval a alert str 0 3 结果 4 2 二维数组转字符串 var b 1 2 a b function
  • 面试题61. 扑克牌中的顺子(java+python)

    从若干副扑克牌中随机抽 5 张牌 判断是不是一个顺子 即这5张牌是不是连续的 2 10为数字本身 A为1 J为11 Q为12 K为13 而大 小王为 0 可以看成任意数字 A 不能视为 14 示例 1 输入 1 2 3 4 5 输出 Tru
  • Java正则校验密码至少包含:字母数字特殊符号中的2种

    一 语法 字符 说明 将下一字符标记为特殊字符 文本 反向引用或八进制转义符 例如 n匹配字符 n n 匹配换行符 序列 匹配 匹配 匹配输入字符串开始的位置 如果设置了 RegExp 对象的 Multiline 属性 还会与 n 或 r
  • PTA天梯赛L1-058 6翻了(c语言实现)

    原题链接 这道题稍微有一点点灵活 乍一想还是有点想不到的 主要还是对6的个数进行计数 如果是6则计数有多少个6 如果不是6的话则要进行判断 如果在此之前6的个数超过了3 gt 3 但是小于等于9那么要输出9 如果在此之前6的个数超过了9 g
  • Python命令行参数定义及注意事项

    在命令行中运行python代码是很常见的 下面介绍如何定义命令后面跟的参数 常规用法 Python代码中主要使用下面几行代码来定义并获取需要在命令行中赋值的参数 import argparse parser argparse Argumen
  • 数据结构与算法学习总结(六)——字符串的模式匹配算法

    基本概念 字符串是一种特殊的线性表 即元素都是 字符 的线性表 字符是组成字符串的基本单位 字符的取值依赖于字符集 例如二进制的字符集为0 1 则取值只能为 0 1 再比如英语语言 则包括26个字母外加标点符号 例如 abcde 就是一个字
  • regex_replace()函数的应用与解析

    include
  • C#中Validating和Validated事件

    您可能经常需要检查用户输入到 Windows 窗体中的信息是否有效 例如 如果您有一个电话号码的 TextBox 控件 则可以检查该控件是否只包含适当的字符 数字 括号和连字符等等 通常 可使用正则表达式验证用户输入的数据 了解Valida
  • Python基础知识(四):一文看懂列表、元组和字符串操作

    序列 序列是具有索引和切片能力的集合 列表 元组和字符串具有通过索引访问某个具体的值 或通过切片返回一段切片的能力 列表 元组 字符串都属于序列 1 列表 列表 List 是Python中非常重要的内置数据类型 列表由一系列元素组成 所有的
  • 力扣 942. 增减字符串匹配 双指针解法C++

    给定只含 I 增大 或 D 减小 的字符串 S 令 N S length 返回 0 1 N 的任意排列 A 使得对于所有 i 0 N 1 都有 如果 S i I 那么 A i lt A i 1 如果 S i D 那么 A i gt A i
  • 【Java】Java中的String类

    文章目录 一 认识 String 类 二 String 类的常用方法 2 1 构造方法 2 2 String 类对象之间的比较 2 3 字符串查找 2 4 字符串的转换 2 5 字符串替换 2 6 字符串拆分 2 7 字符串截取 2 8 字
  • c++工程模式+配置文件+动态调用类

    前言 主函数 SimpleFactoryRefactor cpp include
  • 字符串09--表示数值的字符串

    字符串09 表示数值的字符串 jz53 题目概述 解析 参考答案 注意事项 说明 题目概述 算法说明 请实现一个函数用来判断字符串是否表示数值 包括整数和小数 例如 字符串 100 5e2 123 3 1416 和 1E 16 都表示数值
  • java OpenOffice把word转html(Convert word to html )

    1 下载安装OpenOffice 网址http download openoffice org index html 2 下载第三方工具包JODConverter http www artofsolving com opensource j
  • java中null和isEmpty的区别

    isEmpty 分配了内存空间 值为空 是绝对的空 里面的值为空 分配了内存空间 值为空字符串 是相对的空 里面的值为空 null 未分配内存空间 没有值 是一种无值 值不存在 结论 null只能分辨出值是否分配内存空间 isEmpty不能
  • 正则校验手机号

    正则表达式可以用来校验手机号码的合法性 如果你想使用正则表达式来校验中国大陆的手机号码 可以使用如下的正则表达式 1 3 9 d 9 这个正则表达式可以匹配所有 13 到 19 开头的 11 位数字 即所有中国大陆的手机号码 例如 如果你想
  • SourceInsight

    1 开胃菜 初级应用 1 1 选择美丽的界面享受工作 虽然不能以貌取人 但似乎从来没有人责备以貌取软件的 SI的华丽界面 绝对符合现代花花世界的人的审美趣味 在SI中 我们可以轻松地把各种类型关键字 变量 标志符 函数 宏 注释等定义为不同
  • Python 正则表达式指南

    文章目录 1 正则表达式基础 1 1 简单介绍 1 2 数量词的贪婪模式与非贪婪模式 1 3 反斜杠的困扰 1 4 匹配模式 2 re模块 2 1 开始使用re 2 2 Match 2 3 Pattern 1 正则表达式基础 1 1 简单介
  • 常用表单正则表达式

    校验 大小写字母 汉字 export const verifyCheEng a zA Z p sc Han gu 校验 数字 大小写字母 汉字 export const verifyCheEngNum a zA Z0 9 p sc Han

随机推荐