Skip to content

Latest commit

 

History

History
154 lines (120 loc) · 5.08 KB

07.把字符串转换成整数.md

File metadata and controls

154 lines (120 loc) · 5.08 KB

目录介绍

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

好消息

  • 博客笔记大汇总【15年10月到至今】,包括Java基础及深入知识点,Android技术博客,Python学习笔记等等,还包括平时开发中遇到的bug汇总,当然也在工作之余收集了大量的面试题,长期更新维护并且修正,持续完善……开源的文件是markdown格式的!同时也开源了生活博客,从12年起,积累共计N篇[近100万字,陆续搬到网上],转载请注明出处,谢谢!所有博客陆续更新到GitHub上!
  • 链接地址:https://github.com/yangchong211/YCBlogs
  • 如果觉得好,可以star一下,谢谢!当然也欢迎提出建议,万事起于忽微,量变引起质变!

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
    

其他内容

01.关于博客汇总链接

02.关于我的博客