java中字符串转整数及MyAtoi方法的实现

2025-05-29 0 73

java中字符串整数MyAtoi方法的实现

该题虽然和我们正常使用的字符串整数的API中函数不一致,但是通过增加了很多额外的边界或者异常处理,可以锻炼算法思维的敏锐性和处理边界异常等问题的能力。

java中字符串转整数及MyAtoi方法的实现

思路:字符串题一般考查的都是边界条件、特殊情况的处理。所以遇到此题一定要问清楚各种条件下的输入输出应该是什么样的。

这里已知的特殊情况有:

  • 能够排除首部的空格,从第一个非空字符开始计算
  • 允许数字以正负号(+-)开头
  • 遇到非法字符便停止转换,返回当前已经转换的值,如果开头就是非法字符则返回0
  • 在转换结果溢出时返回特定值,这里是最大/最小整数

先来几组测试用例:

?

1

2

3

4

5

6

7

8

9
" 010"

" +004500"

" -001+2a42"

" +0 123"

"-2147483648"

"2147483648"

" - 321"

" -11919730356x"

"9223372036854775809"

以上的测试用例对应的正确输出如下:

?

1

2

3

4

5

6

7

8

9
10

4500

-1

0

-2147483648

2147483647

0

-2147483648

2147483647

Java实现代码如下:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34
public static int myAtoi(String str) {

if(str==null||str.length()==0)

return 0;

char[] array = str.toCharArray();

long result = 0; // 要返回的结果result

int count = 0; // 记录‘+'或者‘-'出现的次数

int num = 0; // 判断空格出现的位置

int flag = 1; // 正数还是负数

for (int i = 0; i < array.length; i++) {

Character c = array[i];

if(c>='0'&&c<='9'){

result = result*10+c-'0';

// 判断是否溢出

if(flag==1&&result>Integer.MAX_VALUE){

return Integer.MAX_VALUE;

}else if(flag==-1&&-result<Integer.MIN_VALUE)

return Integer.MIN_VALUE;

num++;

}else if(c==' '&&num==0&&count==0)

continue;

else if(c=='+'&&count==0){

count = 1;

}

else if(c=='-'&&count==0){

flag = -1;

count = 1;

}

else{

return (int) (flag*result);

}

}

return (int) (flag*result);

}

在上边的代码中,for循环遍历数组中,判断某个char是否是数字,可以使用Character.isDigit(c)方法,计算result时,可以使用Character.getNumericValue(c)方法来得到某个char类型的数值,总之就是可以很方便的使用Character里边的静态方法。

重写的for循环如下:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23
for (int i = 0; i < array.length; i++) {

Character c = array[i];

if(Character.isDigit(c)){

result = result*10+Character.getNumericValue(c);

if(flag==1&&result>Integer.MAX_VALUE){

return Integer.MAX_VALUE;

}else if(flag==-1&&-result<Integer.MIN_VALUE)

return Integer.MIN_VALUE;

num++;

}else if(Character.isSpaceChar(c)&&num==0&&count==0)

continue;

else if(c=='+'&&count==0){

count = 1;

}

else if(c=='-'&&count==0){

flag = -1;

count = 1;

}

else{

return (int) (flag*result);

}

}

当面试时被问到这个题,我们可以不慌不乱的和面试官亲切交谈,制定该函数的一些规则,即如何处理异常输入等,之后,再遍历数组,根据需求进行相应的异常处理哦~

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

原文链接:http://blog.csdn.net/qq_25827845/article/details/72353770

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 java中字符串转整数及MyAtoi方法的实现 https://www.kuaiidc.com/116767.html

相关文章

发表评论
暂无评论