字符串数字转换为整型数字,考虑正负号,溢出,非法字符

/**
*功能:字符串数字转换成整型数。
*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='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;
	}
}

你可能感兴趣的:(java,编程基础)