一、题目描述
将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),
要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0。
输入描述:
输入一个字符串,包括数字字母符号,可以为空
输出描述:
如果是合法的数值表达则返回该数字,否则返回0
输入:
+2147483647
1a33
输出:
2147483647
0
二、解题思路
注意两个事项即可:
(1)正负数问题
(2)溢出问题
三、java代码
public class Solution_50 {
/**
* 将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),
* 要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0。
输入描述:
输入一个字符串,包括数字字母符号,可以为空
输出描述:
如果是合法的数值表达则返回该数字,否则返回0
输入:
+2147483647
1a33
输出:
2147483647
0
*/
public int StrToInt(String str) {
if(str==null || str.length()<2){
return 0;
}
int len = str.length();
int minInt = Integer.MIN_VALUE; //最小值
int maxInt = Integer.MAX_VALUE; //最大值
long num=0;
char[] charArray = str.toCharArray();
if(charArray[0]=='-'){
for(int i=1;i<len;i++){
if(charArray[i]<='9' && charArray[i]>='0'){
num = num*10 + charArray[i]-'0';
}else {
return 0;
}
}
if((-num)<minInt){ //判断溢出
return 0;
}else {
return (int)(-num);
}
}else if(charArray[0]=='+'){
for(int i=1;i<len;i++){
if(charArray[i]<='9' && charArray[i]>='0'){
num = num*10 + charArray[i]-'0';
}else {
return 0;
}
}
if((num)>maxInt){ //判断溢出
return 0;
}else {
return (int)(num);
}
}else {
for(int i=0;i<len;i++){
if(charArray[i]<='9' && charArray[i]>='0'){
num = num*10 + charArray[i]-'0';
}else {
return 0;
}
}
if((num)>maxInt){ //判断溢出
return 0;
}else {
return (int)(num);
}
}
}
public static void main(String[] args) {
Solution_50 s = new Solution_50();
System.out.println(s.StrToInt("-2147483649"));
}
}