要考虑各种边界条件!
public class StringToInt {
boolean isValid = true ;
public int stringToInt(String str) throws Exception
{
if(str == null || str.length() == 0)
{
isValid = false ;
return 0 ;
}
boolean isNative = false ;
int radix = 10 ;
int result = 0 ;
char first = str.charAt(0);
int limit1 = Integer.MAX_VALUE / radix ;
if(first < '0')
{
if(str.length() <= 1)
throw new Exception("input invalid !");
if(first == '-')
isNative = true ;
else if(first != '+')
throw new Exception("input invalid !");
}
else
{
result = result * radix + first - '0' ;
}
for(int i = 1 ; i < str.length(); i++)
{
char ch = str.charAt(i);
if(ch >= '0' && ch <= '9')
{
if(result <= limit1)
result = result * radix ;
else throw new Exception("input too big");
int limit2 = Integer.MAX_VALUE - ch + '0' ;
if( result <= limit2 )
result = result + ch - '0' ;
else throw new Exception("input too big");
}
else
throw new Exception("input valid");
}
return isNative ? -result : result ;
}
public static void main(String[] args) {
String str = "-123456789";
StringToInt tool = new StringToInt() ;
try{
int a = tool.stringToInt(str);
if(a == 0)
{
if(!tool.isValid)
System.out.println("String cannot be null or empty");
}
else System.out.println(a);
}catch(Exception e)
{
System.out.println(e.getMessage());
}
}
}