我知道执行此操作的一个解决方案如下:
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');
如何将其转换为数字?
答案 0 :(得分:12)
char digit =(char)(tmp.charAt(i) - '0');
在ascii table中,'0'
到'9'
的字符是连续的。因此,如果您知道tmp.charAt(i)
将在0
和9
之间返回一个字符,那么减去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;
}
}