package algorithm;
import org.junit.Test;
//String to Integer (atoi) (字符串转成整数)
/*
*字符串转整数
*想所有的输入,算输出
* */
public class StringToInt {
public int atoi(String str){
try{
if(str==null||str.equals("")){
//throw new NumberFormatException("非法输入");
return 0;
}
//如果开始为空格,则查找第一个不是空格的字符
int start=0;
boolean positive=true; //默认为正数
//去掉前面的空格
char cr=str.charAt(start); //字符
while(cr==' '){
start++;
if(start>=str.length()){
System.out.println("全是空格");
return 0;
}
cr=str.charAt(start);
}
cr=str.charAt(start);//第一个非空字符
if(cr=='-'||cr=='+'){
if(cr=='-'){
positive=false;
}
start++;
}
//下面为数字
cr=str.charAt(start);
if(cr>='0'&&cr<='9'){
return realInt(str,start,positive);
}else{ //输入不合法
throw new NumberFormatException("输入不合法,数字不为0-9");
}
//System.out.println(cr);
}catch(Exception e){
e.printStackTrace();
}
return 0;
}
//字符串转数组,前面数字已经处理
private int realInt(String str, int start, boolean positive) {
System.out.println("start="+start);
long result=0;
while(start<str.length()&&str.charAt(start)>='0'&&str.charAt(start)<='9'){
//(str.charAt(start)-'0') 才为数字 *************
//如果直接为str.charAt(start),则无法为真实需要的数字
result=result*10+(str.charAt(start)-'0');
if(positive){//如果为正数
if(result>Integer.MAX_VALUE){
return Integer.MAX_VALUE;
}
}else{
if (-result < Integer.MIN_VALUE) {
return Integer.MIN_VALUE;
}
}
start++;
}
if(start==str.length()){//输入合法
System.out.println("输入合法"+result);
if(positive){//如果为正数
return (int) result;
}else{
return (int) -result;
}
}else{
System.out.println("输入非法"+str);
return 0;
}
}
@Test
public void test1(){
String tt=" +222";
int result=new StringToInt().atoi(tt);
if(result==222){
System.out.println("匹配:"+result);
}else{
System.out.println("结果不匹配:"+result);
}
}
@Test
public void test2(){
String tt=" -99";
int result=new StringToInt().atoi(tt);
if(result==0){
System.out.println("检测正确:"+result);
}else{
System.out.println("检测不匹配:"+result);
}
}
@Test
public void test3(){
String tt="99999999999999999999";
int result=new StringToInt().atoi(tt);
if(result==Integer.MAX_VALUE){
System.out.println("匹配:"+result);
}else{
System.out.println("结果不匹配:"+result);
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}