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

作者:lqh 时间:2023-09-23 20:54:19 

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

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

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

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

这里已知的特殊情况有:

  • 能够排除首部的空格,从第一个非空字符开始计算

  • 允许数字以正负号(+-)开头

  • 遇到非法字符便停止转换,返回当前已经转换的值,如果开头就是非法字符则返回0

  • 在转换结果溢出时返回特定值,这里是最大/最小整数

先来几组测试用例:


"  010"
"  +004500"
" -001+2a42"
"  +0 123"
"-2147483648"
"2147483648"
"  - 321"
"   -11919730356x"
"9223372036854775809"

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


10
4500
-1
0
-2147483648
2147483647
0
-2147483648
2147483647

Java实现代码如下:


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循环如下:


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

标签:java,字符串,MyAtoi方法
0
投稿

猜你喜欢

  • Android 6.0权限请求相关及权限分组方法

    2023-11-27 20:08:03
  • C#处理猜拳问题的简单实例(非窗体)

    2021-08-01 18:58:22
  • C#实现Zip压缩目录中所有文件的方法

    2021-05-29 15:41:47
  • android自定义View实现简单五子棋游戏

    2022-09-16 14:52:30
  • Android SimpleAdapter适配器使用详解

    2023-10-07 07:04:26
  • SSH框架网上商城项目第1战之整合Struts2、Hibernate4.3和Spring4.2

    2023-04-19 15:01:55
  • java使用htmlparser提取网页纯文本例子

    2022-06-14 12:47:05
  • Android实现控制摄像头拍照

    2022-06-03 02:14:06
  • 深入学习Java单元测试(Junit+Mock+代码覆盖率)

    2021-06-17 00:39:13
  • Spring事务失效的一种原因关于this调用的问题

    2022-07-19 20:59:21
  • C#中的IEnumerable接口深入研究

    2022-04-06 11:13:42
  • 详解Android XML中引用自定义内部类view的四个why

    2023-06-01 19:40:41
  • Spring Boot 静态资源处理方式

    2022-09-14 11:14:39
  • 浅谈Java的两种多线程实现方式

    2022-08-17 09:42:37
  • 第三方包jintellitype实现Java设置全局热键

    2023-09-25 10:33:50
  • Spark内存调优指南

    2022-07-28 09:22:25
  • java实现http的Post、Get、代理访问请求

    2021-10-30 08:13:47
  • C#编程中使用设计模式中的原型模式的实例讲解

    2023-07-18 07:47:10
  • Java 实战范例之线上婚纱摄影预定系统的实现

    2021-08-08 14:19:42
  • 一款非常简单酷炫的LoadingView动画效果

    2021-11-09 11:49:08
  • asp之家 软件编程 m.aspxhome.com