• 剑指49.把字符串转换成整数


    题目描述

    将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0
     

    输入描述:

    输入一个字符串,包括数字字母符号,可以为空

    输出描述:

    如果是合法的数值表达则返回该数字,否则返回0

    思路

    这道题主要考察如何将字符串转化为数字(不调用库函数),方法很简单,但是本题能反映出面试者的编程习惯,测试时要考虑到各种测试用例,保证代码的鲁棒性。

    代码实现

    public class Solution {
        public int StrToInt(String str) {
            if (str.length() == 0 || str.trim().length() == 0) //trim()的作用:去掉字符串首尾的空格。
                return 0;
            int index = 0;
            int flag = 0;
            long ans = 0; // 最终返回结果
            while (index < str.length()){
                if (str.charAt(index) == '-' || str.charAt(index) == '+'){
                    if (index == 0){
                        flag = str.charAt(index) == '-' ? -1 : 1;
                    }else{
                        return 0;
                    }
                }else if (str.charAt(index) >= '0' && str.charAt(index) <= '9'){
                    ans = ans * 10 + str.charAt(index) - '0'; // char字符转化为数字的核心步骤
                    if (judge(ans,flag)){ // 对ans是否溢出int类型做判断
                        return 0;
                    }
                }else{
                    return 0;
                }
                index++;
            }
            return flag == -1 ? flag*(int)ans : (int)ans;
        }
        private boolean judge(long ans, int flag) {
            if (flag == -1){
                if (ans * flag < Integer.MIN_VALUE){
                    return true;
                }else{
                    return false;
                }
            }else{
                if (ans > Integer.MAX_VALUE){
                    return true;
                }else{
                    return false;
                }
            }
        }
    }

    收获

    int类型与char类型的相互转化

    (1)int类型→char类型

    (2)char类型→int类型

        public static void main(String[] args) {
            // int → char :数字加一个'0',然后强转为char
            int num1 = 2;
            char cNum1 = (char)(num1 + '0');
            System.out.println(cNum1);
    
            int num = 456;
            String sNum = num + "";
            System.out.println(sNum);
    
            // char → int :将字符减去'0'
            char cNum2 = '3';
            int num2 = (int)cNum2 - '0';
            System.out.println(num2);
    
            String str1 = "345";
            int ans = 0;
            for (int i = 0; i < str1.length(); i++) {
                ans = ans * 10 + str1.charAt(i) - '0';
            }
            System.out.println(ans);
        }
  • 相关阅读:
    idea报“Usage of API documented as @since 1.7”这一问题的解决方法
    分页的总页数算法
    Error evaluating expression 'category.id != null and category.id != '''. Cause: org.apache.ibatis.og
    json日期处理类
    解决maven过滤必需配置文件的方法
    数据库配置文件
    springmvc 提供的统一解决json中文乱码配置
    EXPLAIN 命令详解
    MySQL索引与Index Condition Pushdown(二)
    【MySQL】性能优化之 Index Condition Pushdown
  • 原文地址:https://www.cnblogs.com/HuangYJ/p/13597114.html
Copyright © 2020-2023  润新知