java 字符型整数转成整数,[Java] 自己实现字符串转换成整数

在CSDN首页上看到一个题,看着觉得很简单,就来做着试试看。结果提交以后提示挑战失败!!!

天理何在,给的测试用例全部能通过呀!囧。。。

下面附上我的实现代码吧,有点暴力,我想用Java正则表达式会好一些,可惜我现在还不怎么会。。

import java.util.Scanner;

public class GlobalMembers

{

public static int StrToInt(String str)

{

//我认为本题用正则表达式做更佳,可惜我不会用Java正则表达式。

int result = 0;

int flag = 0; //存储读到+和-的总次数,超过两次退出循环。

int sign = 1; //存储result的符号。1代表正号,-1代表负号

boolean rangeOutFlag = false; //存储数字越界的信号。

boolean read = false; //在读到非空字符时,read置为true。

for(int i=0; i

switch(str.charAt(i)){

case '0':

result = result*10;

read = true;

break;

case '1':

result = result*10 + 1;

read = true;

break;

case '2':

result = result*10 + 2;

read = true;

break;

case '3':

result = result*10 + 3;

read = true;

break;

case '4':

result = result*10 + 4;

read = true;

break;

case '5':

result = result*10 + 5;

read = true;

break;

case '6':

result = result*10 + 6;

read = true;

break;

case '7':

result = result*10 + 7;

read = true;

break;

case '8':

result = result*10 + 8;

read = true;

break;

case '9':

result = result*10 + 9;

read = true;

break;

case '+':

if(read==true){

return result;

} else {

if(flag++!=0){

return 0;

}

}

read = true;

break;

case '-':

if(read==true){

return result;

} else {

if(flag++!=0){

return 0;

} else {

sign = -sign;

}

}

read = true;

break;

case ' ':

if(read==true){

return sign*result;

}

break;

default:

return sign*result;

}

if (rangeOutFlag==true) {

return sign*result;

}

else if (result==214748364 && (i+1)

switch(str.charAt(i+1)){

case '8':

case '9':

if (sign==1) {

return 2147483647;

} else if (sign==-1) {

return -2147483648;

}

}

rangeOutFlag = true;

} else if (result>214748364 && (i+1)

switch(str.charAt(i+1)){

case '0':

case '1':

case '2':

case '3':

case '4':

case '5':

case '6':

case '7':

case '8':

case '9':

if (sign==1) {

return 2147483647;

} else if (sign==-1) {

return -2147483648;

}

}

rangeOutFlag = true;

}

}

return sign*result;

}

//start 提示:自动阅卷起始唯一标识,请勿删除或增加。

@SuppressWarnings("resource")

public static void main(String args[])

{

while(true){

Scanner in = new Scanner(System.in);

String str = in.next();

if(str.equals("exit")){ //如果读到exit,退出循环

break;

}

int integer = StrToInt(str);

System.out.println(integer);

}

}

//end //提示:自动阅卷结束唯一标识,请勿删除或增加。

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值