- 01.题目要求
- 02.问题分析
- 03.实例代码
- 博客笔记大汇总【15年10月到至今】,包括Java基础及深入知识点,Android技术博客,Python学习笔记等等,还包括平时开发中遇到的bug汇总,当然也在工作之余收集了大量的面试题,长期更新维护并且修正,持续完善……开源的文件是markdown格式的!同时也开源了生活博客,从12年起,积累共计N篇[近100万字,陆续搬到网上],转载请注明出处,谢谢!所有博客陆续更新到GitHub上!
- 链接地址:https://github.com/yangchong211/YCBlogs
- 如果觉得好,可以star一下,谢谢!当然也欢迎提出建议,万事起于忽微,量变引起质变!
- 问题如下所示:
- 将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),要求不能使用字符串转换整数的库函数。数值为0或者字符串不是一个合法的数值则返回0。
- 示例 :
public static void main(String[] args){ String str1 = "f210+211"; String str2 = "210211"; String str3 = "010211"; int a = StrToInt(str1); int b = StrToInt(str2); int c = StrToInt(str3); System.out.println("yc----a---" + a); System.out.println("yc----b---" + b); System.out.println("yc----c---" + c); } //打印日志 yc----a---0 yc----b----210211 yc----c----10211
- 分析思路如下所示
- 首先判断字符串不为空,否则直接返回0;
- 然后将字符串转化为字符数组,获取第一个字符,如果是‘+’则是整数,如果是‘-’则是负数。
- 创建一个变量,用于保存结果。然后依次遍历字符数组。
- 如果某个字符不是数字,则直接返回0;
- 如果字符都是数字,则需要做运算res = res * 10 + temp;
- 代码如下所示
public static int StrToInt(String str) { if (str==null || str.length() == 0){ return 0; } char[] chars = str.toCharArray(); // 判断是否存在符号位 int flag = 0; if (chars[0] == '+'){ flag = 1; } else if (chars[0] == '-'){ flag = 2; } int start = flag > 0 ? 1 : 0; int res = 0;// 保存结果 for (int i = start; i < chars.length; i++) { // 调用Character.isDigit(char)方法判断是否是数字,是返回True,否则False if (Character.isDigit(chars[i])) { int temp = chars[i] - '0'; res = res * 10 + temp; } else { return 0; } } return flag == 1 ? res : -res; }
- 如果上面字符串中除了+,-符号以外的非数字字符,则直接剔除,然后打印数组,则如何操作
public static int toInt(String str) { if (str==null || str.length() == 0){ return 0; } char[] chars = str.toCharArray(); // 判断是否存在符号位 int flag = 0; if (chars[0] == '+'){ flag = 1; } else if (chars[0] == '-'){ flag = 2; } int start = flag > 0 ? 1 : 0; int res = 0;// 保存结果 for (int i = start; i < chars.length; i++) { // 调用Character.isDigit(char)方法判断是否是数字,是返回True,否则False if (Character.isDigit(chars[i])) { int temp = chars[i] - '0'; res = res * 10 + temp; } else { res = res; } } return flag == 1 ? res : -res; } //测试代码 String str3 = "010a2b11"; int c = toInt(str3); System.out.println("yc----c---" + c); //打印结果 yc----c----10211
- 我的个人站点:
- github:https://github.com/yangchong211
- 知乎:https://www.zhihu.com/people/yczbj/activities
- 简书:http://www.jianshu.com/u/b7b2c6ed9284
- csdn:http://my.csdn.net/m0_37700275
- 喜马拉雅听书:http://www.ximalaya.com/zhubo/71989305/
- 开源中国:https://my.oschina.net/zbj1618/blog
- 泡在网上的日子:http://www.jcodecraeer.com/member/content_list.php?channelid=1
- 邮箱:[email protected]
- 阿里云博客:https://yq.aliyun.com/users/article?spm=5176.100- 239.headeruserinfo.3.dT4bcV
- segmentfault头条:https://segmentfault.com/u/xiangjianyu/articles
- 掘金:https://juejin.im/user/5939433efe88c2006afa0c6e