zoukankan      html  css  js  c++  java
  • String to Integer (atoi)

    package cn.edu.xidian.sselab;

    import java.util.HashMap;

    /**
     * title:String to Integer (atoi)
     * content:
     * Implement atoi to convert a string to an integer.
     * Hint: Carefully consider all possible input cases. If you want a challenge,
     * please do not see below and ask yourself what are the possible input cases.
     * Notes: It is intended for this problem to be specified vaguely (ie, no given input specs).
     *  You are responsible to gather all the input requirements up front.
     */
    public class StringToInteger {

        
        //错误的解法,自己没有想明白这个问题,以为任意的字符都可以转换成整型,想的太天真,其实这个问题,自己看Java源码的时候看过Integer.parseInt(String str)
        public static int myAtoi(String str){
            StringBuffer sb = new StringBuffer();
            if(str == null){
                return Integer.MIN_VALUE;
            }else if(str.equals("")){
                return 0;
            }
            else{
                int len = str.length();
                int j = 0;
                if(str.startsWith("-")||str.startsWith("+")){
                    sb.append(str.charAt(0));
                    j++;
                }                
                for(int i=j;i<len;i++){
                    char temp = str.charAt(i);
                    if(temp >= '0' && temp <= '9'){
                        sb.append(temp);
                    }else if(temp >= 'A' && temp <= 'Z'){
                        sb.append(65 + temp - 'A');
                    }else if((temp >= 'a' && temp <= 'z')){
                        sb.append(97 + temp - 'a');
                    }else {
                        sb.append("0");
                    }
                }
            }
            
            System.out.println(sb);
            int num = Integer.valueOf(sb.toString());
            if(num > Integer.MAX_VALUE){
                return Integer.MAX_VALUE;
            }else if(num < Integer.MIN_VALUE){
                return Integer.MIN_VALUE;
            }else{
                return num;
            }
            
        }
        
        //正确的解法
        //这个问题要注意几个方面(1)输入是“”,null这种字符串的时候,返回0
        //(2)判断转换的值是否大于Integer的最大值,是否小于Integer的最小值,及超过int的范围,返回int最大值或最小值
        //(3)里面会有“+”“-”的影响
        //学到了一个API方法Character.isWhitespace()判断是否为“”
        public static int myAtois(String str){
            int p = 0 ;
            int ret = 0;
            int digit = 0;
            int len =  str.length();
            if(str == null || len == 0)
                return 0;
            while(p < len && Character.isWhitespace(str.charAt(p)))
                p++;
            if(p == len)
                return 0;
            boolean flag = (str.charAt(p) == '-');
            if(str.charAt(p) == '-' || str.charAt(p) == '+'){
                p++;
            }
            for(;p<len;p++){
                if(str.charAt(p) > '9'||str.charAt(p) < '0'){
                    break;
                }else{
                    digit = str.charAt(p) - '0';
                    if(!flag && ((Integer.MAX_VALUE - digit) / 10 < ret))
                        return Integer.MAX_VALUE;
                    if(flag && ((Integer.MIN_VALUE + digit) / 10 > ret))
                        return Integer.MIN_VALUE;
                    ret = ret * 10 + (flag? -digit : digit);
                }
            }
            return ret;
        }
    }

  • 相关阅读:
    POJ 1703 Find them, Catch them
    POJ 2236 Wireless Network
    POJ 2010 Moo University
    POJ 2184 Cow Exhibition
    POJ 3280 Cheapest Palindrome
    POJ 3009 Curling 2.0
    POJ 3669 Meteor Shower
    POJ 2718 Smallest Difference
    POJ 3187 Backward Digit Sums
    POJ 3050 Hopscotch
  • 原文地址:https://www.cnblogs.com/wzyxidian/p/4937624.html
Copyright © 2011-2022 走看看