题目描述
将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0
解题思路:首先判空,返回0.
其次,判断符号,使用标识来标记
然后:判断输入的字符串与'0'和'9'的关系,在'0'和'9'外的返回0,在'0'和'9'内的按位计算和。
最后按照标识区分,有符号的和无符号的。
import java.lang.Math;
public class Solution {
public int StrToInt(String str) {
if(str.length()==0){
return 0;
}
// char[] b = str.toCharArray();
int sum = 0;
boolean flag = false;
int sym = 0;
if (str.charAt(0) == '+') {
sym = 1;
}
if (str.charAt(0)== '-') {
flag = true;
}
if (sym == 1||flag==true) {
for (int j = str.length() - 1; j > 0; j--) {
if (str.charAt(j) < '0' ||str.charAt(j)> '9') {
return 0;
}
sum+=(int)Math.pow(10,str.length()-j-1)*(str.charAt(j)-'0');
}
}else{
for (int j = str.length() - 1; j >= 0; j--) {
if (str.charAt(j) < '0' || str.charAt(j) > '9') {
return 0;
}
sum+=(int)Math.pow(10,str.length()-j-1)*(str.charAt(j)-'0');
}
}
return flag?sum*(-1):sum;
}
}
这题做了很久,排一下自己遇到的坑:
1.很蠢,直接把字符串当成数组处理,就是str[i],有两种方法解决:其一是str.charAt(),其二,把字符串转成字符数组:
char[]a=str.toCharArray();
2.把数组中的值用十进制表示不会,调用Math.pow();