在使用charAt的java中的atoi

时间:2011-11-07 16:04:53

标签: java

我知道执行此操作的一个解决方案如下:

 String tmp = "12345";
      int result = 0;
      for (int i =0; i < tmp.length(); i++){
          char digit = (char)(tmp.charAt(i) - '0');
          result += (digit * Math.pow(10, (tmp.length() - i - 1)));

      }

      System.out.println(result);

我不明白的原因是:

char digit = (char)(tmp.charAt(i) - '0');

如何将其转换为数字?

8 个答案:

答案 0 :(得分:12)

  

char digit =(char)(tmp.charAt(i) - '0');

ascii table中,'0''9'的字符是连续的。因此,如果您知道tmp.charAt(i)将在09之间返回一个字符,那么减去0将从零返回偏移量,即该字符的数字表示。

答案 1 :(得分:9)

使用Math.pow非常昂贵,最好使用Integer.parseInt。

您不必使用Math.pow。如果您的号码总是正数,那么您可以

int result = 0;
for (int i = 0; i < tmp.length(); i++)
   result = result * 10 + tmp.charAt(i) - '0';

答案 2 :(得分:7)

char是一个整数类型,它将我们的字母映射到计算机可以理解的数字(参见ascii chart)。字符串只是一个字符数组。由于数字在ascii表示中是连续的,'1' - '0' = 49 - 48 = 1'2' - '0' = 50 - 48 = 2等等。

答案 3 :(得分:2)

试试这个:

int number = Integer.parseInt("12345") 
// or 
Integer number = Integer.valueOf("12345") 

atoi对于开发人员来说可能有些神秘。 Java更喜欢更易读的名称

答案 4 :(得分:1)

如果使用Integer.parseInt,则必须捕获异常,因为 Integer.parseInt(“82.23”)或Integer.parseInt(“ABC”)将启动异常。

如果你想允许像

那样的话
     atoi ("82.23") // => 82
     atoi ("AB123") // => 0

这是有道理的,然后你可以使用

     public static int atoi (String sInt)
     {
        return (int) (atof (sInt));
     }

     public static long atol (String sLong)
     {
        return (long) (atof (sLong));
     }

     public static double atof (String sDob)
     {
        double reto = 0.;

        try {
           reto = Double.parseDouble(sDob);
        }
        catch (Exception e) {}

        return reto;
     }

答案 5 :(得分:0)

Java有一个内置函数可以做到这一点......

String s =  "12345";
Integer result = Integer.parseInt(s);

答案 6 :(得分:0)

我回应汤姆说的话。

如果您对上述实现感到困惑,那么您可以参考以下更简单的实现。

private static int getDecValue(char hex) {
    int dec = 0;
    switch (hex) {
    case '0':
        dec = 0;
        break;
    case '1':
        dec = 1;
        break;
    case '2':
        dec = 2;
        break;
    case '3':
        dec = 3;
        break;
    case '4':
        dec = 4;
        break;
    case '5':
        dec = 5;
        break;
    case '6':
        dec = 6;
        break;
    case '7':
        dec = 7;
        break;
    case '8':
        dec = 8;
        break;
    case '9':
        dec = 9;
        break;
    default:
        // do nothing
    }
    return dec;
}

public static int atoi(String ascii) throws Exception {
    int integer = 0;
    for (int index = 0; index < ascii.length(); index++) {
        if (ascii.charAt(index) >= '0' && ascii.charAt(index) <= '9') {
            integer = (integer * 10) + getDecValue(ascii.charAt(index));
        } else {
            throw new Exception("Is not an Integer : " + ascii.charAt(index));
        }
    }
    return integer;
}

答案 7 :(得分:0)

如果使用Java编程,请使用此,

int atoi(String str)
{
    try{
        return Integer.parseInt(str);
    }catch(NumberFormatException ex){
        return -1;   
    }
}