1.题目
给定一个字符串,验证其是否为数字。
"0"
=> true
" 0.1 "
=> true
"abc"
=> false
"1 a"
=> false
"2e10"
=> true
2.算法
public boolean isNumber(String s)
{
// Write your code here
if (s == null)
{
return false;
}
s = s.trim();
if (s.length() == 0)
{
return false;
}
boolean dogFlag = false;
boolean eFlag = false;
for (int i = 0; i < s.length(); i++)
{
switch (s.charAt(i)) {
case '.': //小数点,前面不能有小数点和e,不能是单独一个小数点如“。”,小数点前面或后面必须有数字
if (dogFlag || eFlag || ((i == 0 || !(s.charAt(i-1)>='0'&&s.charAt(i-1)<='9')) &&
(i==s.length()-1||!(s.charAt(i+1)>='0'&&s.charAt(i+1)<='9'))))
{
return false;
}
dogFlag = true;
break;
case '+':
case '-': //正负号前面或有e,不能在最后,后面必须为数字或小数点
if((i>0 && (s.charAt(i-1)!='e' && s.charAt(i-1)!='E'))
|| (i==s.length()-1 || !(s.charAt(i+1)>='0'&&s.charAt(i+1)<='9'||s.charAt(i+1)=='.')))
{
return false;
}
break;
case 'E':
case 'e': //不能在最后或最前,不能出现两次
if (eFlag || i == 0 || i == s.length() - 1)
{
return false;
}
eFlag = true;
break;
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
break;
default:
return false;
}
}
return true;
}