Validate if a given string is numeric.
Some examples:"0"
=> true
" 0.1 "
=> true
"abc"
=> false
"1 a"
=> false
"2e10"
=> true
解决方案:
public class Solution { public boolean isNumber(String s) { int i=0,n=s.length(); while(i<n&&Character.isWhitespace(s.charAt(i)))i++; if(i<n&&(s.charAt(i)==‘+‘||s.charAt(i)==‘-‘))i++; boolean isNumber=false; while(i<n&&Character.isDigit(s.charAt(i))) { i++; isNumber=true; //有数字就把 isNumber=true } if(i<n&&s.charAt(i)==‘.‘) { i++; while(i<n&&Character.isDigit(s.charAt(i))) //即出现‘.‘, 则后面要么就没有了(i==n ,那么下面所有的判断都不满足了,),要么就是后面有数字,则isNumber=true ) { i++; isNumber=true; } } if(isNumber&&i<n&&s.charAt(i)==‘e‘) //前面没有数字,或者没有 ‘.‘ + 数字 这种形式(isNumber决定),那么当前即便为e,也不需要去处理 { isNumber=false; i++; if(i<n&&(s.charAt(i)==‘+‘||s.charAt(i)==‘-‘))i++; while(i<n&&Character.isDigit(s.charAt(i))) { i++; isNumber=true; } } while(i<n&&Character.isWhitespace(s.charAt(i)))i++; return isNumber&&i==n; } }
注:e9 -> false ; 1. -> true ; .1 -> true ; 49.e+9 -> true ; .e9 -> false; .0e4 -> true 。
大致思路是从左到右,依次处理左边数字前的空格、+-号、‘.’、e(以及e后面的+-号)、数字、右边数字后的空格。‘.’ 以及e只会出现依次,所以用一次 if 即可,然后再判断它后面有没有数字有就
isNumber=true,再判断数字后面是不是还有空格。
特别说明: if(isNumber&&i<n&&s.charAt(i)==‘e‘) 这句语句用的比较好,排除了 e 前面的多种情况,否则对于出现 e 这种情况来说,会有很多情况
原文:http://www.cnblogs.com/zehua-shu/p/5423792.html