/**
*功能:字符串数字转换成整型数。
*String to Integer.
*
*需要注意以下几点:
*1.输入的字符串数字是否包含‘-’、‘+’号;
*2.是否溢出;
*3.输入非法字符串(即除数字以外的);
*/
import java.util.Scanner;
public class StoI
{
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
System.out.println("please enter a string of integers.");
String str = sc.nextLine();
System.out.println(doStoI(str));
}
public static int doStoI(String str)
{
int len = str.length();
if(len==0)
{
System.out.println("输入整数型字符串为空!");
System.exit(0);
}
char[] s = str.toCharArray();//s用来存放字符串的单个字符;
int[] a = new int[len];//a用来存放字符串每个字符转换成的单个整数;
//result用来存放转换成的整数,即最后的结果;
//由于要考虑溢出的情况,所以把result先定义为long型;
long result=0;
int begin=0;//begin是字符串数组中开始转换成整型的开始下标;
boolean sign = true;//输入字符串是否是正数的标志,初始化为是正数;
if(s[0]=='+')
begin=1;//若输入字符串前面有正负号,则从下一位开始转换为数字
else if(s[0]=='-')
{
begin = 1;
sign = false;//输入字符串是负数;
}
for(;begin<len;begin++)
{
if(s[begin]>='0'&&s[begin]<='9')//非法字符除外;
{
a[begin]=s[begin]-'0';
result=result*10+a[begin];
}
else
{
System.out.println("出现非法字符,请重新输入!");
System.exit(0);
}
}
if(!sign)
{
result*=-1;
}
//int只能存32位,超出部分作溢出处理;
if(result>Math.pow(2, 31)-1||result<-Math.pow(2, 31))
{
System.out.println("溢出,请重新输入!");
System.exit(0);
}
System.out.println("the corresponding integer is:");
return (int)result;//强制转换long型的结果为int;
}
}
字符串数字转换为整型数字,考虑正负号,溢出,非法字符
最新推荐文章于 2023-04-28 14:54:37 发布