题目要求
请你写一个函数StrToInt,实现把字符串转换成整数这个功能。当然,不能使用atoi或者其他类似的库函数。
解题思路
本题考查的是将字符串转换为int类型的数字。思路很简单,但是就是要考虑一些特殊情况。
字符串为null,空串,有除了数字之外的字符,溢出(整数的范围是-2147483648~2147483647).
还有数字的正负问题,也需要考虑到其中。
测试用例
1.功能测试(正、负、零、带有正负号的数字)
2.边界值测试(最大正整数,最小负整数)
3.特殊测试(null,数空字符串,仅有正负号,非法字符)
代码
package mySword;
//将"123"--->123
//将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),
//要求不能使用字符串转换整数的库函数。
//数值为0或者字符串不是一个合法的数值则返回0。
public class StrToInt2 {
public static int StrToInt(String str){
boolean minus = false;//如果为负号,则改为true
int index = 0;
int len = str.length();
//判断str是否为null,如果为空则返回-1
if(str == null){
return -1;
}
//判断str的长度是否为0,如果为空则返回-1
if(str.length() == 0){
return -1;
}
//判断是整数还是负数
if(str.charAt(0) == '+'){
index ++;
}else if(str.charAt(0) == '-'){
index ++;
minus = true;
}
//还有一种情况就是这个字符串只有一个符号,也是不对的
if(index != 0 && len == 1){
return -1;
}
int res = 0;
for(int i = index; i < len; i++){
if(str.charAt(i) >= '0' && str.charAt(i) <= '9'){
res = res * 10;
res += str.charAt(i) - '0';
//溢出的情况:原来是正数,加着加着变成负数;原来是负数,加着加着变成正数
if ((!minus && (res < 0)) && (minus && (res-1) > 0)){
res = 0;
break;
}
}else{
res = 0;
break;
}
}
return res;
}
public static void main(String[] args) {
String str = "abc";
System.out.println("abc:" + StrToInt(str));
String str1 = "123";
System.out.println("123:" + StrToInt(str1));
int num = Integer.parseInt("2333");
System.out.println(num);
}
}
收获
0、charAt(int index)方法是一个能够用来检索特定索引下的字符的String实例的方法。
charAt()方法返回指定索引位置的char值。索引范围为0~length()-1。
1、注意各种异常值,边界值
2、记住int类型的范围是-2147483648~2147483647,要考虑溢出的问题
3、参考了https://www.cnblogs.com/yongh/p/9688259.html文中关于int类型和char类型的转化。
package mySword;
public class intAndChar {
//int转char
//int类型转char类型,将数字加一个‘0’,并强制类型转换为char即可
public static void int2Char(int num){
char c = (char)(num + '0');
System.out.println("数字" + num + "转换成char之后是:" + c);
}
//char转int
//char类型装int类型,将字符减一个‘0’即可
public static void char2Int(char c){
int num = c - '0';
System.out.println("字符串" + c + "转换之后是:" + num);
}
public static void main(String[] args) {
int2Char(9);
char2Int('3');
//int类型转char类型
int number = 9;
char cNumber= (char) (number+'0');
System.out.println("Number "+number+" to char is:"+cNumber);
//char类型转int类型
char cNumber2='3';
int number2=cNumber2-'0';
System.out.println("Char "+cNumber2+" to number is:"+number2);
}
}