package com.utils;
public class Convert {
private Convert() {
}
/**
* 将输入的字符串转化为int类型
* @param str 输入的字符串
* @return 返回该字符串对应的int类型
*/
public static int String2Int(String str) {
if(str==null){
throw new RuntimeException("不能为空");
}
long result=0;
int i=0;
boolean negative=false;
long limit=Integer.MAX_VALUE;
int len=str.length();
//如果只有一位,检查是否是数字
if(len==1){
if(str.charAt(0)<48||str.charAt(0)>57)
throw new RuntimeException("输入参数非法:"+str);
else//是数字直接输出
return str.charAt(0)-'0';
}
//以负号开始
if(str.charAt(0)=='-'){
negative=true;
limit=(long)Integer.MAX_VALUE+1;
i=1;
}
//以正号开始
if(str.charAt(0)=='+'){
i=1;
}
char[] chars = str.toCharArray();
//计算string转int的值
for(;i<chars.length;i++){
//string中包含非法字符
if(chars[i]<48||chars[i]>57){
throw new RuntimeException("输入参数非法"+str);
}
result=result*10+(long)(chars[i]-'0');
if(result>limit){
throw new RuntimeException("超过int类型的范围:"+str);
}
}
if(negative){
return -(int)result;
}
return (int)result;
}
public static void main(String[] args) {
//测试为空
// System.out.println(Convert.String2Int(null));
//测试以负号开始
String str="-2147483648";
System.out.println(Convert.String2Int(str));
//测试以正号开始
String str1="+2147483647";
System.out.println(Convert.String2Int(str1));
//测试以负号开始的超过边界
String str2="-2147483649";
//System.out.println(Convert.String2Int(str2));
//测试以正号开始超过边界
String str3="+21474836478";
//System.out.println(Convert.String2Int(str3));
//测试不带正号满足范围
String str4="2147483647";
//System.out.println(Convert.String2Int(str4));
//测试不带正号超过范围
String str5="2147483648";
//System.out.println(Convert.String2Int(str5));
//测试含有非法字符
String str6="a12312";
//System.out.println(Convert.String2Int(str6));
//测试只有一个符号
String str7="+";
String str8="-";
//System.out.println(Convert.String2Int(str7));
//测试各位数
String str11="1";
//System.out.println(Convert.String2Int(str11));
String str12="+1";
//System.out.println(Convert.String2Int(str12));
}
}