版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012429555/article/details/89874341
题目:
将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合
数字要求时返回0),要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0。
思路一:
将字符串里的每一个数字字符取出来,然后高位的乘10的相应幂,然后依次的相加,若是负数的话,最后求个反,由于
int 类型的正数,最大是:-2147483648-2147483647 ,所以如果字符串是-2147483648,则直接输出。因为正数最大2147483647
代码:
public int StrToInt(String str) {
if (str.length()==0||str==null) {
return 0;
}
int len=str.length()-1;
int sum=0;
int sum_1=0;
int sum_2=-2147483648;//特殊情况
//如果首位为+和-的情况
if (str.charAt(0)=='+'||str.charAt(0)=='-') {
for (int i = 1; i < str.length(); i++) {
if (str.charAt(i)-'0'>=0&&str.charAt(i)-'0'<=9) {
sum+=(str.charAt(i)-'0')*Math.pow(10, len-i);//依次将她的高位10乘以相应的幂
}else {
return 0;
}
}
}
//如果首位不是以+或者-开头
if (str.charAt(0)-'0'>=0&&str.charAt(0)-'0'<=9) {
for (int i = 0; i < str.length(); i++) {
if (str.charAt(i)-'0'>=0&&str.charAt(i)-'0'<=9) {
sum_1+=(str.charAt(i)-'0')*Math.pow(10, str.length()-1-i);
}else {
return 0;
}
}
}
if (str.equals("-2147483648")) {
return sum_2;
}
if (str.charAt(0)=='+') {
return sum;
}
if (str.charAt(0)=='-') {
return -1*sum;
}
if (str.charAt(0)-'0'>=0&&str.charAt(0)-'0'<=9) {
return sum_1;
}
return 0;
}
思路二:其实就是上面代码的简化版
嫌麻烦的可用下面的,下面这个要记住字符串的ASCII码变换
public int StrToInt(String str) {
int i=0;
int flag=1;
int sum=0;
if (str.length()==0||str==null) {
return 0;
}
if (str.length()==1&&(str.charAt(0)=='+'||str.charAt(0)=='-')) {
return 0;
}
if (str.charAt(i)=='+') {
i++;
}
if (str.charAt(i)=='-') {
i++;
flag=-1;
}
for (; i < str.length(); i++) {
if (str.charAt(i)-'0'<0||str.charAt(i)-'0'>9) {
return 0;
}else {
sum=sum*10+str.charAt(i)-'0';
}
}
return sum*flag;
}