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)
上一篇 2022年1月1日 下午12:00
下一篇 2022年1月1日 下午12:00


相关推荐

  • send()、sendto()和recv()、recvfrom()的使用

    send()、sendto()和recv()、recvfrom()的使用udp通讯中的sendto()需要在参数里指定接收方的地址/端口,recvfrom()则在参数中存放接收发送方的地址/端口,与之对应的send()和recv()则不需要如此,但是在调用send()之前,需要为套接字指定接收方的地址/端口(这样该函数才知道要把数据发往哪里),在调用recv()之前,可以为套接字指定发送方的地址/端口,这样该函数就只接收指定的发送方的数据,当然若不指定也可,该函数就可以

    2022年7月23日
    11
  • 列式数据库概述_列式数据库多张表

    列式数据库概述_列式数据库多张表阐述列式数据库的基本定义,现状,以及一些开源数据库的性能比较。

    2025年5月23日
    6
  • iPad2成功越狱

    iPad2成功越狱昨天iPad2的越狱终于出啦,作为小白的我,在网上各种教程的帮助下,成功越狱!其实过程还是很简单的~ 步骤一:备份SHSH(据说如果你的设备无需降级,可以忽略备份SHSH这一步,不会对越狱有影响)参考:http://bbs.weiphone.com/read-htm-tid-20

    2022年5月30日
    47
  • svn如何删除当前账号,重新登录

    svn如何删除当前账号,重新登录

    2021年7月17日
    107
  • linux挂载磁盘教程「建议收藏」

    linux挂载磁盘教程「建议收藏」本文中的磁盘/dev/sdb为笔者测试服务器上的命名,在您的服务器中可能是/dev/xdb、/dev/vdb、/dev/xvdb等等请根据实际情况进行修改.1、创建挂载目录mkdir-p/www2、确认是否没有分区的磁盘,如下图,没有分区的磁盘是/dev/sdb,在您的服务器中可能是/dev/vdb,请注意按照实际名称修改fdisk-l3、为磁盘分区,若已分区,可跳过fdisk/dev/sdb4、输入n开始创建分区5、输…

    2022年6月19日
    80
  • C语言数组练习题目

    C语言数组练习题目C语言数组练习题目1、编写程序,输入10个整数存入一维数组,统计输出其中的正数、负数和零的个数。#include<stdio.h>main(){ inta[10],i,j=0,k=0,l=0; printf(“请输入10个整数:”); for(i=0;i<10;i++) { scanf(“%d”,&a[i]); } for(i=0;i<10;i++) { if(a[i]>0) ++j; elseif(a[i]==0) ++k

    2022年7月11日
    16

发表回复

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

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