String转int
面试官抛出一道编程题:设计一个功能把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相关推荐
- JAVA 中 string 和 int 互相转化
在实际开发工作中,有时候为因为一些特殊原因,做类型转换,今天说一下string类型和int类型之间的转换. 1 如何将字串 String 转换成整数 int? A. 有两个方法: 1. int i = ...
- string转int 等(转)
int转string int n = 0; std::stringstream ss; std::string str; ss<<n; ss>>str; string转int ...
- String和int 转换
2019独角兽企业重金招聘Python工程师标准>>> 1 string转换为int 1.1 第一种是使用static方法,不会产生多余对象,但会抛异常 String s = &qu ...
- 如何在Java中将String转换为int?
如何在Java中将String转换为int ? 我的字符串仅包含数字,我想返回它代表的数字. 例如,给定字符串"1234" ,结果应为数字1234 . #1楼 好吧,要考虑的一个非 ...
- golang 获取公网ip 内网ip 检测ip类型 校验ip区间 ip地址string和int转换 判断ip地区国家运营商
目录 简要简介net包 什么是外网IP和内网IP? 获取公网ip 获取本地ip 判断是否是公网ip ip地址string转int ip地址int转string 判断ip地址区间 通过淘宝接口根据公网i ...
- java indexof int,int indexOf(String str, int fromIndex)
int indexOf(String str, int fromIndex) 描述 (Description) java.lang.String.indexOf(String str, int fro ...
- string转换为bigdecimal_SO面试题09:如何将String转换为Int?
# 问题 如何将String转换为int? 我的字符串仅仅包含数字,我想把它返回成一个整数类型. 例如,给你一个字符串 "1234",返回的应该是整型 1234. # 最佳答案 先 ...
- string转换为bigdecimal_java如何将String转换为Int
Java 必知必会 第 1 篇(精挑 Stack Overflow在java中排名前100的问题懂得这些问题的答案帮你解决80%开发问题 )问题: java如何将String转换为Int 答案: ...
- 关于string转int、float、double常用方法
需求:如上图为已经安装内存为8589934592Byte,字符串格式为string,需将其转换为GB显示给用户,格式依然为string: 问题: //前部代码省略,通过命令行获取到str,这里直接将结 ...
- C++ String转int
int str2int(string tmp_str){ int tmp_int; stringstream f(tmp_str); f>>tmp_int; return tmp_int; ...
最新文章
- 门户网站建设与运营需要付出更多成本
- 汇编语言--段寄存器
- 项目Alpha冲刺——代码规范、本次冲刺任务与计划
- cannot和can not的区别 666666
- vue computed 使用小问题
- python海龟绘图圆形_python之海龟绘图
- Java 线程状态流转
- java8 lambda this_java8里lambda里的 this 为什么会指向 lamdba 所在的外部类
- 热烈庆祝博客排名进入前一万(8448)
- 女士品茶 - 简单摘录
- c++邮递员投递经过特定点_关于中国邮递员问题和欧拉图应用
- 今日头条数据分析师分享有感
- turtlebot运动控制问题(不用键盘控制,自己写控制节点控制地盘)
- Euclidean algorithm
- ps怎么将png做成gif_用ps将一组图片序列做成GIF
- Threejs实现模拟管道液体流动
- ews java api maven_通过 EWS JAVA API读取exchange邮件
- jbod ugood 磁盘驱动状态_Win10扫描修复磁盘驱动器错误全攻略
- 如何将音乐导入iphone手机,怎么将歌曲导入到iphone
- 用 Python 实现导弹自动追踪,超燃!
热门文章
- Google Play开发者账号注册 最新攻略
- 【数学建模】多元线性回归模型 - 序
- 金吧台台球计费系统会员导出教程
- 输入端口 HDMI接口,S端子,AV接口,VGA接口, 分量视频接口,TV输入,USB接口的对比
- 【金猿案例展】某保险公司——亚信科技大数据产品,助其数据管理 高效运营...
- 拨动开关内部结构及接线原理
- 卫浴陶瓷行业MES系统应用价值
- linux_c之ioctl的FIONREAD参数
- 发光二极管的典型应用电路
- 【Broadcast】registerReceiver流程