zoukankan      html  css  js  c++  java
  • 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);
        }
    }
  • 相关阅读:
    使用本地系统帐户和域用户帐户两者区别(microsoft SQLServer2000)(ZT)
    Winform中消息循环、异步操作、Control.Invoke&Control.BeginInvoke学习
    SQL字符串的分组聚合(ZT)
    一次项目维护案例而对事务学习的笔记
    NOIP2011提高组 选择客栈
    NOIP2012提高组 Day 2 Problem 2 借教室
    201793模拟赛T2 取数(win)
    201793模拟赛T1 卡片(card)
    01Dart 变量常量
    01TypeScript 基础类型
  • 原文地址:https://www.cnblogs.com/mrpod2g/p/4261923.html
Copyright © 2011-2022 走看看