您的位置:首页 > 编程语言 > Java开发

将一个字符串转换成一个整数

2017-06-15 21:32 260 查看

题目描述

将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0
[b]输入描述:[/b]
输入一个字符串,包括数字字母符号,可以为空


[b]输出描述:[/b]
如果是合法的数值表达则返回该数字,否则返回0


[b]输入例子:[/b]
+2147483647
解题思路:
1. 将输入的字符串转换成字符数组。从大下标开始,反向对每个字符逐个处理,一直到下标为1为止;下标为0的位置字符需单独考虑。
2. 若当前字符的ASII码在[48~57],注意是闭区间。则代表当前字符是[0~9],继续判断下一个。
3. 当遍历到下标为0的字符时,需要进行特殊情况的几个判断。包括是否越界,是否是临界值,是否为负号等。
具体包括:
是否不在48-57之间,如果不在,是否是“+”或者“-”,
代码:
package JianZhiOffer;

import java.util.Scanner;

public class StrToInt
{
    
    public static void main(String[] args)
    {
        Scanner sc=new Scanner(System.in);
        
        while(sc.hasNextLine())
        {
            String s=sc.nextLine();
            int result=StrToInt(s);
            System.out.println(result);
        }
    }
public static int StrToInt(String str)
{   
     if(str==null || str.length() == 0){
         return 0;
     }
     int result = 0;
     char[] chs = str.toCharArray();
     int len = chs.length;
     for(int i=len-1, j=0; i>0; i--, j++){
         int c = (int)chs[i];
         if(c<48 ||c>57){
             return 0;
         }else{
             result += (c-48)*Math.pow(10, j);
         }
     }
    
     if(chs[0]<48&&chs[0]!=45&&chs[0]!=43 ||chs[0]>57)
         return 0;
   
    int c = (int)chs[0];
     if(c<=57&&c>=48)
     {
         result += (c-48)*Math.pow(10, len-1);
     }
     
     if(resul
4000
t<-2147483648 || result>2147483647)
     {
         return 0;     //越界,如果真的越界,直接会报错,result本身没办法越界
     }
     else if(str.equals("2147483648"))
     {
             result = result;
           
      
     }
     else if(str.equals("-2147483648"))
     {
         result = -2147483648;         //边界值
     }
     else
     {
         if(c==43)
             result = result;
         if(c == 45)
         {
             result = -result;         //负号处理
         }
     }
     return result;
        
 }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java
相关文章推荐