String to Integer (atoi)

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.

 

这道题要考虑的细节还蛮多的,str若能convert必须满足以下几点要求:(1)str非空且包含数字;(2)str第一个非空字符必须是+ or - or 数字;(3)若第一个非空字符为+ or -,则紧跟着必须为数字;(4)若转换后的值超过int的最大最小值,则返回MAX_VALUE或者MIN_VALUE。

import java.util.regex.*;
public class Solution {
    public int atoi(String str) {
        
        //排除空串或者str不含数字的情况
        if(str.length() == 0||str.replaceAll("\\D","").length() == 0){
            return 0;
        }
        
        //排除第一个非空字符不是+-或者数字的情况
        String temp = str.replace(" ","");
        if(temp.charAt(0)!='+'&&temp.charAt(0)!='-'&&(temp.charAt(0)>'9'||temp.charAt(0)<'0')){
            return 0;
        }
        
        //排除+-后面一个字符不是数字的情况
        int index;
        if(temp.charAt(0) == '-'){
            index = str.indexOf('-');
            if(str.charAt(index+1)>'9'||str.charAt(index+1)<'0'){
                return 0;
            }
        }
        
        if(temp.charAt(0) == '+'){
            index = str.indexOf('+');
            if(str.charAt(index+1)>'9'||str.charAt(index+1)<'0'){
                return 0;
            }
        }
        
        //排除所有特殊情况后用正则表达式匹配
        String re = "";
        Pattern p = Pattern.compile("[+-]?\\d+");
        Matcher m = p.matcher(str);
        if(m.find()){
            re = m.group();
        }
        else{
            return 0;
        }
        //若所得数字大于MAX_VALUE则返回MAX_VALUE
        if(Double.valueOf(re)>Integer.MAX_VALUE){
            return Integer.MAX_VALUE;
        }
        //若所得数字小于MIN_VALUE则返回MIN_VALUE
        if(Double.valueOf(re)<Integer.MIN_VALUE){
            return Integer.MIN_VALUE;
        }
        
        return Integer.valueOf(re);
    }
}

 

posted @ 2015-01-30 11:34  mrpod2g  阅读(120)  评论(0编辑  收藏  举报