题目描述
将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0
输入描述:
输入一个字符串,包括数字字母符号,可以为空
输出描述:
如果是合法的数值表达则返回该数字,否则返回0
示例1
输入
+2147483647 1a33
输出
2147483647 0
思路:算法用到了,试图将字符串变为整形,如果出现了NumberFormatException异常则说明数字是非整形,返回0。否则说明转换成功了,则返回转换后的sb。
public class Solution {
public int StrToInt(String str) {
int sb=0;
try{
sb=Integer.parseInt(str);
}catch(NumberFormatException e){
return 0;
}
return sb;
}
}
2.普通方法判别
思路:1.先判断第一位是否为负号,如果是。那么在结果中要加一个负号。
2.进入for循环,如果当前值为'+',则跳出,进行下一步操作。否则判断当前字符是否处于0-9之间。
3.如果是则进行转换,由于计算的数值都是整数对应的ASCII值,因此要减去0的ASCII值(48)。最后输出结果。
public class Solution {
public int StrToInt(String str) {
if(str.equals("")||str.length()==0) return 0;
char []a=str.toCharArray();
int symbol=0;
if(a[0]=='-')
symbol=1;
int sum=0;
for(int i=symbol;i<a.length;i++){
if(a[i]=='+')
continue;
//判断当前字符的ascii码是否处在0-9之间,若不是在输出
if(a[i]<48||a[i]>57) return 0;
sum=sum*10+a[i]-48;
}
return symbol==0?sum:sum*-1;
}
}