码迷,mamicode.com
首页 > 其他好文 > 详细

49、把字符串转为整数

时间:2017-07-03 23:44:56      阅读:252      评论:0      收藏:0      [点我收藏+]

标签:最小值   没有   一个   close   第一个   trim   ==   public   ring   

思路:合法字符的话,取得该位数字并不断*10相加

注意:

  • 输入的是非法字符,null,,有非数字的字符
  • 输入的有正负号
  • 只输入+,-
  • 有没有超出最大最小的整数
技术分享
public class Solution {
    public int StrToInt(String str) {
        boolean legal ;//是否合法输入
        if(str == null || str.length() == 0){
            return 0;
          
        }
        String s = str.trim();//去掉首位字符
        int len = s.length();             
        int sign = 1;//符号标志位,1为正
        int result = 0;//返回的结果
        int limit= Integer.MAX_VALUE;//整数最大值/最小值
        int i = 0;//遍历字符每个元素
       //第一个字符非数字,只有一个符号时
        if(s.charAt(0) < ‘0‘){
            if(s.charAt(0) == ‘-‘) {
                limit = Integer.MIN_VALUE;
                sign = -1;
            } else if (s.charAt(0) != ‘+‘) {
                return 0; 
            }
            if(len == 1) {
                return 0;
              
            }
            i++;//
        }
        
        while(i < len){
            int c = s.charAt(i) - ‘0‘;
            if(c >= 0 && c <= 9){
                //溢出处理
                if(sign > 0 && (result > limit / 10 ||(result == limit / 10 &&  c > limit % 10))){
                    return 0;

                } else if (sign < 0 && (result > -(limit / 10) || (result == -(limit / 10) && c > -(limit % 10)))){
                    return 0;

                }
                result = result * 10 + c;   
                i++;
            } else {
                return 0;
            }
        }
        legal = true;
       return sign > 0 ? result : -result;                
    }
}
View Code

测试:

功能测试:输入的字符串为正、负和0

边界值:最大最小的整数

输入null,非法字符,只有一个符号的,数字掺杂非法字符。

49、把字符串转为整数

标签:最小值   没有   一个   close   第一个   trim   ==   public   ring   

原文地址:http://www.cnblogs.com/lingli-meng/p/7113222.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!