标签:valid number
描述:
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.
Update (2015-02-10):
The signature of the C++ function had been updated. If you still see your
function signature accepts a const char * argument, please click the reload
button to reset your code definition.
思路:
这道题目还是挺复杂的,复杂的原因是题目并没有给出有效数字的定义,比如说 .1 ,2.1e10.2 ,2e3.2 和2.1e5 有效,但10.1.1非法而这些数字的判断又是很麻烦的
代码:
public boolean isNumber(String s) {
s = s.trim();
if (s.startsWith("+"))
s = s.substring(1);
else if (s.startsWith("-"))
s = s.substring(1);
boolean isInterger = false;
boolean isFloater = false;
boolean isSciencer = false;
if (isInt(s))
isInterger = true;
int indexFloat = -1;
int indexScience1 = -1;
int indexScience2 = -1;
indexFloat = s.indexOf('.');
indexScience1 = s.indexOf('e');
indexScience2 = s.indexOf('E');
String nums[] = null;
if (indexFloat != -1) {
int index1=s.indexOf('.');
int index2=s.lastIndexOf('.');
if(index1!=index2)
isFloater=false;
else
isFloater = isFloat(s);
}
if (indexScience1 + indexScience2 != -2) {
if (indexScience1 != -1)
{
int index1=s.indexOf('e');
int index2=s.lastIndexOf('e');
if(index1!=index2)
isSciencer=false;
else
{
nums = s.split("e");
isSciencer = isScientific(nums);
}
}
if (indexScience2 != -1)
{
int index1=s.indexOf('E');
int index2=s.lastIndexOf('E');
if(index1!=index2)
isSciencer=false;
else
{
nums = s.split("E");
isSciencer = isScientific(nums);
}
}
}
if (isFloater || isInterger || isSciencer)
return true;
return false;
}
public boolean isScientific(String num[]) // 是否为有效的科学计数
{
if(num.length<2)
return false;
if (num[1].startsWith("+") || num[1].startsWith("-"))
num[1] = num[1].substring(1);
boolean flag1 = num[0].contains(".");
if (flag1)
flag1 = isFloat(num[0]);
else
flag1 = isInt(num[0]);
boolean flag2 = isInt(num[1]);
if (flag1 && flag2)
return true;
return false;
}
public boolean isFloatic(String str[]) //是否为有效的浮点数
{
if (isInt(str[0]) && isInt(str[1]))
return true;
return false;
}
public boolean isFloat(String s) //是否为浮点数
{
boolean isTrue = false;
String nums[] = null;
if (s.startsWith("."))
isTrue = isInt(s.substring(1));
else if(s.endsWith("."))
isTrue = isInt(s.substring(0,s.length()-1));
else {
nums = s.split("\\.");
if (nums.length != 2)
return false;
isTrue = isInt(nums[0]) && isInt(nums[1]);
}
return isTrue;
}
public boolean isInt(String str) //是否为整数
{
if (str == null || str.length() == 0)
return false;
boolean isLeg = true;
char ch;
for (int i = 0; i < str.length(); i++) {
ch = str.charAt(i);
if (ch > '9' || ch < '0') {
isLeg = false;
break;
}
}
return isLeg;
}标签:valid number
原文地址:http://blog.csdn.net/mnmlist/article/details/45765857