编程进阶网编程进阶网
  • 基础组成体系
  • 程序编程原理
  • 异常和IO系统
  • 六大设计原则
  • 设计模式导读
  • 创建型设计模式
  • 结构型设计模式
  • 行为型设计模式
  • 设计模式案例
  • 面向对象思想
  • 基础入门
  • 高级进阶
  • JVM虚拟机
  • 数据集合
  • Java面试题
  • C语言入门
  • C综合案例
  • C标准库
  • C语言专栏
  • C++入门
  • C++综合案例
  • C++专栏
  • HTML
  • CSS
  • JavaScript
  • 前端专栏
  • Swift
  • iOS入门
  • 基础入门
  • 开源库解读
  • 性能优化
  • Framework
  • 方案设计
  • 媒体音视频
  • 硬件开发
  • Groovy
  • 常用工具
  • 大厂面试题
  • 综合案例
  • 网络底层
  • Https
  • 网络请求
  • 故障排查
  • 专栏
  • 数组
  • 链表
  • 栈
  • 队列
  • 树
  • 递归
  • 哈希
  • 排序
  • 查找
  • 字符串
  • 其他
  • Bash脚本
  • Linux入门
  • 嵌入式开发
  • 代码规范
  • Markdown
  • 开发理论
  • 开发工具
  • Git管理
  • 百宝箱
  • 开源协议
  • 技术招聘
  • 测试经验
  • 职场提升
  • 技术模版
  • 关于我
  • 目标清单
  • 学习框架
  • 育儿经验
  • 我的专栏
  • 底层能力
  • 读书心得
  • 随笔笔记
  • 职场思考
  • 中华历史
  • 经济学故事
  • 基础组成体系
  • 程序编程原理
  • 异常和IO系统
  • 六大设计原则
  • 设计模式导读
  • 创建型设计模式
  • 结构型设计模式
  • 行为型设计模式
  • 设计模式案例
  • 面向对象思想
  • 基础入门
  • 高级进阶
  • JVM虚拟机
  • 数据集合
  • Java面试题
  • C语言入门
  • C综合案例
  • C标准库
  • C语言专栏
  • C++入门
  • C++综合案例
  • C++专栏
  • HTML
  • CSS
  • JavaScript
  • 前端专栏
  • Swift
  • iOS入门
  • 基础入门
  • 开源库解读
  • 性能优化
  • Framework
  • 方案设计
  • 媒体音视频
  • 硬件开发
  • Groovy
  • 常用工具
  • 大厂面试题
  • 综合案例
  • 网络底层
  • Https
  • 网络请求
  • 故障排查
  • 专栏
  • 数组
  • 链表
  • 栈
  • 队列
  • 树
  • 递归
  • 哈希
  • 排序
  • 查找
  • 字符串
  • 其他
  • Bash脚本
  • Linux入门
  • 嵌入式开发
  • 代码规范
  • Markdown
  • 开发理论
  • 开发工具
  • Git管理
  • 百宝箱
  • 开源协议
  • 技术招聘
  • 测试经验
  • 职场提升
  • 技术模版
  • 关于我
  • 目标清单
  • 学习框架
  • 育儿经验
  • 我的专栏
  • 底层能力
  • 读书心得
  • 随笔笔记
  • 职场思考
  • 中华历史
  • 经济学故事
  • 01.翻转字符串
  • 02.字符串替换空格
  • 03.把字符串转换成整数
  • 04.回文字符串
  • 05.字符串的排列
  • 06.第一个只出现一次的字符
  • 07.把字符串转换成整数
  • 08.翻转单词顺序
  • 09.左旋转字符串
  • 10.表示数值字符串
  • 11.查找最长公共前缀
  • 12.第一个不重复的字符

07.把字符串转换成整数

目录介绍

  • 01.题目要求
  • 02.问题分析
  • 03.实例代码

01.题目要求

  • 问题如下所示:
    • 将一个字符串转换成一个整数(实现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

02.问题分析

  • 分析思路如下所示
    • 首先判断字符串不为空,否则直接返回0;
    • 然后将字符串转化为字符数组,获取第一个字符,如果是‘+’则是整数,如果是‘-’则是负数。
    • 创建一个变量,用于保存结果。然后依次遍历字符数组。
    • 如果某个字符不是数字,则直接返回0;
    • 如果字符都是数字,则需要做运算res = res * 10 + temp;

03.实例代码

  • 代码如下所示
    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;
    }

04.改进一下

  • 如果上面字符串中除了+,-符号以外的非数字字符,则直接剔除,然后打印数组,则如何操作
    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
贡献者: yangchong211
上一篇
06.第一个只出现一次的字符
下一篇
08.翻转单词顺序