美文网首页
字符串转化为整数

字符串转化为整数

作者: 繁星追逐 | 来源:发表于2019-11-22 11:31 被阅读0次

    将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。

    • 数值为0或者字符串不是一个合法的数值则返回0
    public class StrToInt {
        private static boolean valid;
        public static int StrToInt(String str) {
           if (str == null ||str.length() == 0 || str.trim().equals("")) return 0;
           boolean isNegitive = false;
           //设置number为长整型,防止太大
           long number = 0;
           for (int i=0;i<str.length();i++){
               //如果第一个符号是正负号,符号改变变量,正号不用管
               if (i == 0 && (str.charAt(i) == '-' || str.charAt(i) == '+')){
                   if (str.charAt(i) == '-'){
                       isNegitive = true;
                   }
                   //只有一个符号,失效
                   if (str.length() == 1){
                       return 0;
                   }
                   continue;
               }
               //如果有一个符号不是数字,直接退出
               if (str.charAt(i) <'0' || str.charAt(i) > '9'){
                   return 0;
               }
               //设置符号,得出结果
               int flag = isNegitive ? -1 : 1;
               //注意:直接在原有基础上赋值,重新组合数字的技巧
               number = number*10 + flag*(str.charAt(i) - '0');
               //判断常数的上下界限
               if ((!isNegitive && number > Integer.MAX_VALUE) || (isNegitive && number < Integer.MIN_VALUE)){
                   return 0;
               }
    
           }
            valid = true;
            return (int) number;
        }
    
    
        public static boolean flag;
        public static int StrToInt1(String str) {
            flag = false;
            //判断输入是否合法
            if (str == null || str.trim().equals("")) {
                flag = true;
                return 0;
            }
            // symbol=0,说明该数为正数;symbol=1,该数为负数;start用来区分第一位是否为符号位
            int symbol = 0;
            int start = 0;
            char[] chars = str.trim().toCharArray();
            if (chars[0] == '+') {
                start = 1;
            } else if (chars[0] == '-') {
                start = 1;
                symbol = 1;
            }
            int result = 0;
            for (int i = start; i < chars.length; i++) {
                if (chars[i] > '9' || chars[i] < '0') {
                    flag = true;
                    return 0;
                }
                int sum= result * 10 + (int) (chars[i] - '0');
    
    
                if((sum-(int) (chars[i] - '0'))/10!=result){
                    flag=true;
                    return 0;
                }
    
                result=result * 10 + (int) (chars[i] - '0');
                /*
                 * 本人认为java热门第一判断是否溢出是错误的,举个反例
                 * 当输入为value=2147483648时,在计算机内部的表示应该是-2147483648
                 * 显然value>Integer.MAX_VALUE是不成立的
                 */
            }
            // 注意:java中-1的n次方不能用:(-1)^n .'^'异或运算
            // 注意,当value=-2147483648时,value=-value
            result = (int) Math.pow(-1, symbol) * result;
            return result;
        }
        public static void main(String[] args) {
            System.out.println(StrToInt("123"));
            System.out.println(StrToInt("-12"));
            System.out.println(StrToInt("+12"));
            System.out.println(StrToInt("+")+ " "+ StrToInt.valid);
            System.out.println(StrToInt("0")+ " "+ StrToInt.valid);
            System.out.println(StrToInt("12345678901112")+ " "+ StrToInt.valid);
        }
    }
    
    

    相关文章

      网友评论

          本文标题:字符串转化为整数

          本文链接:https://www.haomeiwen.com/subject/tsbwbctx.html