LintCode:有效数字

描述

给定一个字符串,验证其是否为数字。

样例

"0" => true

" 0.1 " => true

"abc" => false

"1 a" => false

"2e10" => true

思路:按照.和e进行分割,判断分割后的字符串是否符合标准。.前面可以有数字也可以没有数字,如果e和.都存在,则他们中间必须有数字,e后面必须有数字,前面也必须有数字。各种情况都要考虑。

注意:有一些特殊情况需要注意:".123.","e12","12e","e.Ee..","   "这些都是无效数字。".12","123."是有效数字。还要考虑+,-。

实现:

public class IsNumber {
	public boolean isNumber(String s) {
		if(s==null || s.length()<1) return false;			
		int i=0;
		int j=s.length()-1;
	    while(i<s.length() && s.charAt(i)==' ') i++;
	    if(i>j) return false;//只有空格的字符串
		while(j>=0 && s.charAt(j)==' ') j--;
		if(s.charAt(i)=='+' || s.charAt(i)=='-')
			i++;
		s=s.substring(i, j+1).toLowerCase();
		//全是由e和.组成的字符串	
		if(s.replaceAll("\\.", "").replaceAll("e", "").length()==0)
			return false;
		if(s.charAt(0)=='.' && s.charAt(s.length()-1)=='.')
			return false;
		for(int k=0; k<s.length(); k++){
			if(!((s.charAt(k)>='0' && s.charAt(k)<='9') || s.charAt(k)=='.' || s.charAt(k)=='e'))
				return false;
		}
		String[] strs1=s.split("\\.");
		boolean b=true;
		if(strs1.length>2) return false;
		if(strs1.length==1) b=false;
		for(int k=0; b && k<strs1[0].length(); k++){
			if(strs1[0].charAt(k)<'0' || strs1[0].charAt(k)>'9')
				return false;
		}
		String[] strs2;
		if(b){
			if(strs1[1].charAt(0)=='e' || strs1[1].charAt(strs1[1].length()-1)=='e')
				return false;
			strs2=strs1[1].split("e");
		}
		else{
			if(strs1[0].charAt(0)=='e' || strs1[0].charAt(strs1[0].length()-1)=='e')
				return false;
			strs2=strs1[0].split("e");
		}

		if(strs2.length>2) return false;
		for(int k=0; k<strs2[0].length(); k++){
			if(strs2[0].charAt(k)<'0' || strs2[0].charAt(k)>'9')
				return false;
		}
		return true;
    }

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值