Valid Number

Valid Number

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

称号

Validate if a given string is numeric.

Some examples:
"0" => true
" 0.1 " => true
"abc" => false
"1 a" => false
"2e10" => true

Note: It is intended for the problem statement to be ambiguous. You should gather all requirements up front before implementing one.

方法

分下面几个步骤: 
1. 将字符串的最前面和最后面的空格去掉。
2. 推断是否有e。并依据有e的情况进行推断:e前面是浮点。e后面必须是整形。

3. 没有e,则推断整个字符串是不是浮点。注意字符串前面的正负号别忘了。

PS:能够将使用小数点和e将字符串划分成3部分,进行推断。仅仅须要遍历一遍字符串。

    private boolean isDouble(String s) {
    	if (s.charAt(0) == '-' || s.charAt(0) == '+') {
    		if (s.length() == 1) {
    			return false;
    		} else {
    			s = s.substring(1);
    		}
    	}
        int len = s.length();
        boolean hasPoint = false;
        boolean pointNext = false;
        boolean pointPre = false;
        for(int i = 0; i < len; i++) {
            char cur = s.charAt(i);
            if (cur == '.') {
                if (hasPoint) {
                    return false;
                } else {
                    hasPoint = true;
                }
            } else if (cur>= '0' && cur <= '9') {
                if (hasPoint) {
                    pointNext = true;
                } else {
                    pointPre = true;
                }
            } else {
                return false;
            }
        }
        if (hasPoint && (pointNext == false && pointPre == false)) {
            return false;
        } else {
            return true;
        }
    }
    
    
    private boolean isInteger(String s) {
    	if (s.charAt(0) == '-' || s.charAt(0) == '+') {
    		if (s.length() == 1) {
    			return false;
    		} else {
    			s = s.substring(1);
    		}
    	}
        int len = s.length();
        for (int i = 0; i < len; i++) {
            char cur = s.charAt(i);
            if (!(cur>= '0' && cur <= '9')) {
                return false;
            }
        }
        return true;
    }
    
    
    public boolean isNumber(String s) {
        if (s == null || s.length() == 0) {
            return false;
        } 
        
        //
        while(!s.equals("") && s.charAt(0) == ' ') {
            s = s.substring(1);
        }
        while(!s.equals("") && s.charAt(s.length() - 1) == ' ') {
            s = s.substring(0, s.length() - 1);
        }
        if (s.equals("")) {
            return false;
        }
        
        int len = s.length();
        for (int i = 0; i < len; i++) {
            char cur = s.charAt(i);
            if (cur == 'e') {
                if ((i == 0 || i == len - 1)) {
                    return false;
                } else {
                     return isDouble(s.substring(0, i)) && isInteger(s.substring(i + 1));
                }
            } 
        }
        return isDouble(s);
    }

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/117727.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Mysql 添加字段或者创建表SQL语句「建议收藏」

    Mysql 添加字段或者创建表SQL语句「建议收藏」最近要向测试和运维发SQL脚本,习惯了用工具,忘记了原始操作手法

    2022年10月10日
  • 基于cesuim三维框架开发的三维路径分析的实现「建议收藏」

    基于cesuim三维框架开发的三维路径分析的实现「建议收藏」1、可以利用百度地图web服务或者天地图web服务,得到二维的路径分析的经纬度;2、利用cesuim地形数据采样接口:sampleTerrain得到高程,然后就有了三维路径分析的坐标信息;3、然后利用画线的接口,就能完成路径分析;记录一下sanpleTerrain的用法://QuerytheterrainheightoftwoCartographicpositionsva…

    2022年8月24日
  • 细说SDRAM控制器

    细说SDRAM控制器SDRAM的基本概念SDRAM凭借其极高的性价比,广泛应用于高速数据存储、实时图像处理等设计当中,但是相对于SRAM、FIFO等其他存储器件,SDRAM的控制相对复杂。虽说是复杂,但也不代表没办法实现,仔细梳理一下,发现SDRAM的控制其实也没这么难。本文就SDRAM的基本概念以及其工作流程做简要介绍。SDRAM的基本信号:SDRAM的基本信号(电源以及地线在这里不讨论)可以…

    2022年7月25日
  • mysql前缀索引语句_mysql 前缀索引

    mysql前缀索引语句_mysql 前缀索引联合索引概念联合索引又叫复合索引,即一个覆盖表中两列或者以上的索引,例如:index_name(columna,columnb)1创建方式执行altertable语句时创建altertabletable_nameaddindexindex_name(column_list)1index_name是创建的联合索引的名字,可以没有,没有的话系统会根据该索引包含的第一列来赋名称;tabl…

    2022年5月10日
  • [Android] 【每日更新书源】「阅读」APP -100+ 精品书源一键导入!每天自动更新最新书源!…

    [Android] 【每日更新书源】「阅读」APP -100+ 精品书源一键导入!每天自动更新最新书源!…我特地写了个爬虫爬取书源,每天自动更新书源(URL是固定的)!大家也可以定期导入一下!放心!导入时会自动去除重复书源的!前段时间我发过一个书源大礼包的帖子,不过现在已经无法编辑修改了,所以我又开了一个新帖子,这次内容可不一样了!我上次说过想要自动抓取阅读官方公众号里分享的书源,结果结果公…

    2022年6月16日
  • protostuff序列化map_为什么要实现序列化

    protostuff序列化map_为什么要实现序列化这几天在看rpc框架的东西,一哥们写的轻量级rpc框架(http://my.oschina.net/huangyong/blog/361751?fromerr=NpC3phqY)实现,写的rpc很不错,就跟着撸了遍代码,里面用到的序列化工具是protostuff,之前我们项目供应商接口用的xml,没用过protostuff,拿过来研究下,写个demo示例,以后再需要的话,也可以拿过来用。常用的

    2022年5月3日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号