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()函数用法案例详解
# 可以使用
# 不慌不乱
# 都是
# 第一个
# 遍历
# 我们可以
# 希望能
# 重写
# 正常使用
# 谢谢大家
# 问到
# 方法来
# 很方便
# 先来
# 如何处理
# 首部
# 组中
# 应该是
# 增加了
# 面试官
相关文章:
微信h5制作网站有哪些,免费微信H5页面制作工具?
如何在云主机快速搭建网站站点?
如何在阿里云完成域名注册与建站?
大学网站设计制作软件有哪些,如何将网站制作成自己app?
如何在Golang中使用encoding/gob序列化对象_存储和传输数据
C++时间戳转换成日期时间的步骤和示例代码
jQuery 常见小例汇总
如何配置支付宝与微信支付功能?
网站制作报价单模板图片,小松挖机官方网站报价?
制作门户网站的参考文献在哪,小说网站怎么建立?
购物网站制作公司有哪些,哪个购物网站比较好?
成都网站制作公司哪家好,四川省职工服务网是做什么用?
网站制作难吗安全吗,做一个网站需要多久时间?
郑州企业网站制作公司,郑州招聘网站有哪些?
如何通过老薛主机一键快速建站?
建站之星如何实现PC+手机+微信网站五合一建站?
电脑免费海报制作网站推荐,招聘海报哪个网站多?
建站之星CMS建站配置指南:模板选择与SEO优化技巧
西安大型网站制作公司,西安招聘网站最好的是哪个?
建站之星如何配置系统实现高效建站?
三星网站视频制作教程下载,三星w23网页如何全屏?
导航网站建站方案与优化指南:一站式高效搭建技巧解析
建站之星北京办公室:智能建站系统与小程序生成方案解析
黑客如何通过漏洞一步步攻陷网站服务器?
官网建站费用明细查询_企业建站套餐价格及收费标准指南
如何零基础开发自助建站系统?完整教程解析
微信小程序制作网站有哪些,微信小程序需要做网站吗?
正规网站制作公司有哪些,目前国内哪家网页网站制作设计公司比较专业靠谱?口碑好?
建站之星CMS五站合一模板配置与SEO优化指南
JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)
高端智能建站公司优选:品牌定制与SEO优化一站式服务
宝塔建站教程:一键部署配置流程与SEO优化实战指南
简易网站制作视频教程,使用记事本编写一个简单的网页html文件?
韩国服务器如何优化跨境访问实现高效连接?
*服务器网站为何频现安全漏洞?
建站为何优先选择香港服务器?
如何用5美元大硬盘VPS安全高效搭建个人网站?
建站主机选购指南与交易推荐:核心配置解析
非常酷的网站设计制作软件,酷培ai教育官方网站?
如何实现建站之星域名转发设置?
,交易猫的商品怎么发布到网站上去?
如何在企业微信快速生成手机电脑官网?
临沂网站制作企业,临沂第三中学官方网站?
如何在云主机上快速搭建网站?
IOS倒计时设置UIButton标题title的抖动问题
Android使用GridView实现日历的简单功能
C#如何序列化对象为XML XmlSerializer用法
建站之星安装步骤有哪些常见问题?
详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)
网站制作网站,深圳做网站哪家比较好?
*请认真填写需求信息,我们会在24小时内与您取得联系。