面试官抛出一道编程题:设计一个功能把String转成int,尽量多考虑特殊情况。当时笔者如下作答:用正则表达式替换非数字及正负号进行计算,后来考虑到性能和时间复杂度,又借鉴了Integer.parseInt()的思路,最后编写出一套自己的方法,时间复杂度为O(n)。
  经过测试,比Integer.parseInt()的效率要高一点,而且可以忽略非正负号和非数字的字符。但是特殊情况肯定没有标准功能考虑地更全面,不知道Integer.parseInt()具体考虑到了哪些特殊场景,代码奉上:

public class Hello {private static int ADD_ASCII = 43;private static int SUBTRACT_ASCII = 45;private static int ZERO_ASCII = 48;private static int NINE_ASCII = 57;public static void main(String[] args) {String s = "123456789";long start = System.currentTimeMillis();for (int i = 0; i < 1000_0000; i++) {Integer.parseInt(s);}long end = System.currentTimeMillis();long cost = end - start;start = System.currentTimeMillis();for (int i = 0; i < 1000_0000; i++) {convert(s);}end = System.currentTimeMillis();System.out.println("Integer.parseInt()耗时:" + cost + "ms\n" + "convert()耗时:" + (end - start) + "ms");}private static int convert(String str) {if (str == null) {throw new NumberFormatException("The String is null!");}//从前往后判断,如果遇到+-或者数字,结束判断并开始计数int radix = 10;int startIndex = -1;int strLength = str.length();char eachChar;for (int i = 0; i < strLength; i++) {eachChar = str.charAt(i);if (eachChar == ADD_ASCII|| eachChar == SUBTRACT_ASCII|| eachChar >= ZERO_ASCII&& eachChar <= NINE_ASCII) {startIndex = i;break;}}if (startIndex == -1) {throw new NumberFormatException("There is no Number!");}if (startIndex == strLength - 1) {if (str.charAt(startIndex) == ADD_ASCII || str.charAt(startIndex) == SUBTRACT_ASCII) {throw new NumberFormatException("There is no Number!");} else {return str.charAt(startIndex) - ZERO_ASCII;}}boolean negative = true;boolean hasDigit = false;int result = 0;eachChar = str.charAt(startIndex);if (eachChar == ADD_ASCII) {startIndex++;} else if (eachChar == SUBTRACT_ASCII) {startIndex++;negative = false;}//开始计数for (int i = startIndex; i < str.length(); i++) {eachChar = str.charAt(i);if (eachChar >= ZERO_ASCII&& eachChar <= NINE_ASCII) {result = result * radix + eachChar - ZERO_ASCII;if (result < 0) {throw new NumberFormatException("Data is too big for int!");}hasDigit = true;}}if (!hasDigit) {throw new NumberFormatException("There is no Number!");}return negative ? result : -result;}
}

代码运行结果如图:

String转int相关推荐

  1. JAVA 中 string 和 int 互相转化

    在实际开发工作中,有时候为因为一些特殊原因,做类型转换,今天说一下string类型和int类型之间的转换. 1 如何将字串 String 转换成整数 int? A. 有两个方法: 1. int i = ...

  2. string转int 等(转)

    int转string int n = 0; std::stringstream ss; std::string str; ss<<n; ss>>str; string转int ...

  3. String和int 转换

    2019独角兽企业重金招聘Python工程师标准>>> 1 string转换为int 1.1 第一种是使用static方法,不会产生多余对象,但会抛异常 String s = &qu ...

  4. 如何在Java中将String转换为int?

    如何在Java中将String转换为int ? 我的字符串仅包含数字,我想返回它代表的数字. 例如,给定字符串"1234" ,结果应为数字1234 . #1楼 好吧,要考虑的一个非 ...

  5. golang 获取公网ip 内网ip 检测ip类型 校验ip区间 ip地址string和int转换 判断ip地区国家运营商

    目录 简要简介net包 什么是外网IP和内网IP? 获取公网ip 获取本地ip 判断是否是公网ip ip地址string转int ip地址int转string 判断ip地址区间 通过淘宝接口根据公网i ...

  6. java indexof int,int indexOf(String str, int fromIndex)

    int indexOf(String str, int fromIndex) 描述 (Description) java.lang.String.indexOf(String str, int fro ...

  7. string转换为bigdecimal_SO面试题09:如何将String转换为Int?

    # 问题 如何将String转换为int? 我的字符串仅仅包含数字,我想把它返回成一个整数类型. 例如,给你一个字符串 "1234",返回的应该是整型 1234. # 最佳答案 先 ...

  8. string转换为bigdecimal_java如何将String转换为Int

    Java 必知必会 第 1 篇(精挑 Stack Overflow在java中排名前100的问题懂得这些问题的答案帮你解决80%开发问题 )问题: java如何将String转换为Int    答案: ...

  9. 关于string转int、float、double常用方法

    需求:如上图为已经安装内存为8589934592Byte,字符串格式为string,需将其转换为GB显示给用户,格式依然为string: 问题: //前部代码省略,通过命令行获取到str,这里直接将结 ...

  10. C++ String转int

    int str2int(string tmp_str){ int tmp_int; stringstream f(tmp_str); f>>tmp_int; return tmp_int; ...

最新文章

  1. 门户网站建设与运营需要付出更多成本
  2. 汇编语言--段寄存器
  3. 项目Alpha冲刺——代码规范、本次冲刺任务与计划
  4. cannot和can not的区别 666666
  5. vue computed 使用小问题
  6. python海龟绘图圆形_python之海龟绘图
  7. Java 线程状态流转
  8. java8 lambda this_java8里lambda里的 this 为什么会指向 lamdba 所在的外部类
  9. 热烈庆祝博客排名进入前一万(8448)
  10. 女士品茶 - 简单摘录
  11. c++邮递员投递经过特定点_关于中国邮递员问题和欧拉图应用
  12. 今日头条数据分析师分享有感
  13. turtlebot运动控制问题(不用键盘控制,自己写控制节点控制地盘)
  14. Euclidean algorithm
  15. ps怎么将png做成gif_用ps将一组图片序列做成GIF
  16. Threejs实现模拟管道液体流动
  17. ews java api maven_通过 EWS JAVA API读取exchange邮件
  18. jbod ugood 磁盘驱动状态_Win10扫描修复磁盘驱动器错误全攻略
  19. 如何将音乐导入iphone手机,怎么将歌曲导入到iphone
  20. 用 Python 实现导弹自动追踪,超燃!

热门文章

  1. Google Play开发者账号注册 最新攻略
  2. 【数学建模】多元线性回归模型 - 序
  3. 金吧台台球计费系统会员导出教程
  4. 输入端口 HDMI接口,S端子,AV接口,VGA接口, 分量视频接口,TV输入,USB接口的对比
  5. 【金猿案例展】某保险公司——亚信科技大数据产品,助其数据管理 高效运营...
  6. 拨动开关内部结构及接线原理
  7. 卫浴陶瓷行业MES系统应用价值
  8. linux_c之ioctl的FIONREAD参数
  9. 发光二极管的典型应用电路
  10. 【Broadcast】registerReceiver流程