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

该题虽然和我们正常使用的字符串转整数的API中函数不一致,但是通过增加了很多额外的边界或者异常处理,可以锻炼算法思维的敏锐性和处理边界异常等问题的能力。
思路:字符串题一般考查的都是边界条件、特殊情况的处理。所以遇到此题一定要问清楚各种条件下的输入输出应该是什么样的。
这里已知的特殊情况有:
先来几组测试用例:
" 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);
}
}
当面试时被问到这个题,我们可以不慌不乱的和面试官亲切交谈,制定该函数的一些规则,即如何处理异常输入等,之后,再遍历数组,根据需求进行相应的异常处理哦~
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# 字符串转整数及MyAtoi方法的实现
# java中字符串转整数
# C语言模拟实现atoi函数的实例详解
# 基于atoi()与itoa()函数的内部实现方法详解
# 深入理解atoi()与itoa()函数的用法
# atoi和itoa函数的实现方法
# C++ atoi()函数用法案例详解
# 可以使用
# 不慌不乱
# 都是
# 第一个
# 遍历
# 我们可以
# 希望能
# 重写
# 正常使用
# 谢谢大家
# 问到
# 方法来
# 很方便
# 先来
# 如何处理
# 首部
# 组中
# 应该是
# 增加了
# 面试官
相关文章:
如何用VPS主机快速搭建个人网站?
图册素材网站设计制作软件,图册的导出方式有几种?
如何在IIS服务器上快速部署高效网站?
制作门户网站的参考文献在哪,小说网站怎么建立?
如何通过西部数码建站助手快速创建专业网站?
合肥做个网站多少钱,合肥本地有没有比较靠谱的交友平台?
建站之星导航如何优化提升用户体验?
网站设计制作企业有哪些,抖音官网主页怎么设置?
,在苏州找工作,上哪个网站比较好?
无锡制作网站公司有哪些,无锡优八网络科技有限公司介绍?
企业网站制作公司网页,推荐几家专业的天津网站制作公司?
建站之星收费标准详解:套餐费用及年费价格表一览
如何高效利用亚马逊云主机搭建企业网站?
如何做网站制作流程,*游戏网站怎么搭建?
网站制作需要会哪些技术,建立一个网站要花费多少?
网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?
定制建站是什么?如何实现个性化需求?
移民网站制作流程,怎么看加拿大移民官网?
成都网站制作报价公司,成都工业用气开户费用?
如何在阿里云购买域名并搭建网站?
如何在腾讯云免费申请建站?
如何用y主机助手快速搭建网站?
零服务器AI建站解决方案:快速部署与云端平台低成本实践
如何在阿里云虚拟主机上快速搭建个人网站?
网站海报制作教学视频教程,有什么免费的高清可商用图片网站,用于海报设计?
如何用搬瓦工VPS快速搭建个人网站?
建站主机与虚拟主机有何区别?如何选择最优方案?
如何选择高效稳定的ISP建站解决方案?
平台云上自助建站如何快速打造专业网站?
北京网站制作网页,网站升级改版需要多久?
高防服务器租用指南:配置选择与快速部署攻略
宝塔面板创建网站无法访问?如何快速排查修复?
标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?
网站制作的方法有哪些,如何将自己制作的网站发布到网上?
如何将凡科建站内容保存为本地文件?
小程序网站制作需要准备什么资料,如何制作小程序?
正规网站制作公司有哪些,目前国内哪家网页网站制作设计公司比较专业靠谱?口碑好?
微信小程序 input输入框控件详解及实例(多种示例)
如何快速搭建自助建站会员专属系统?
如何通过wdcp面板快速创建网站?
设计网站制作公司有哪些,制作网页教程?
广州网站建站公司选择指南:建站流程与SEO优化关键词解析
免费ppt制作网站,有没有值得推荐的免费PPT网站?
大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?
建站主机选择指南:服务器配置与SEO优化实战技巧
建站之星导航配置指南:自助建站与SEO优化全解析
如何在万网自助建站平台快速创建网站?
TestNG的testng.xml配置文件怎么写
如何用PHP工具快速搭建高效网站?
建站主机是什么?如何选择适合的建站主机?
*请认真填写需求信息,我们会在24小时内与您取得联系。