Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中使用charAt的atoi_Java - Fatal编程技术网

java中使用charAt的atoi

java中使用charAt的atoi,java,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))); } Syste

我知道这样做的一个解决方案是:

 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);
这个怎么能转换成数字呢

字符位=(字符)(tmp.charAt(i)-'0')


在中,从
'0'
'9'
的字符是连续的。因此,如果您知道
tmp.charAt(i)
将返回一个介于
0
9
之间的字符,那么对
0
进行减法运算将返回从零开始的偏移量,即该字符所代表的数字。

Java有一个内置函数来实现这一点

String s =  "12345";
Integer result = Integer.parseInt(s);
试试这个:

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

atoi
对于开发人员来说可能有点迷茫。Java更喜欢可读性更强的名称

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

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

你不必用数学。如果你的数字总是正的,你可以做

int result = 0;
for (int i = 0; i < tmp.length(); i++)
   result = result * 10 + tmp.charAt(i) - '0';
int结果=0;
对于(int i=0;i
如果使用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;
     }
我附和汤姆说的话

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

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;
}
private static int getDecValue(字符十六进制){
int-dec=0;
开关(十六进制){
案例“0”:
dec=0;
打破
案例“1”:
dec=1;
打破
案例“2”:
dec=2;
打破
案例“3”:
dec=3;
打破
案例“4”:
dec=4;
打破
案例“5”:
dec=5;
打破
案例“6”:
dec=6;
打破
案例“7”:
dec=7;
打破
案例“8”:
dec=8;
打破
案例“9”:
dec=9;
打破
违约:
//无所事事
}
返回12月;
}
公共静态int atoi(字符串ascii)引发异常{
整数=0;
对于(int index=0;index如果(ascii.charAt(index)>='0'&&ascii.charAt(index)如果用Java编程,请使用此

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

你只是想把一个字符串转换成一个int吗?是的,我是..而且我必须写我自己的函数,在这个家庭作业中有点像atoi?如果不是,就用
Integer.valueOf(“12345”)
。如果是,请将其标记为。@xonegirlz-您尝试过我的解决方案吗?如果有效,请接受答案并投票!可能重复的虽然这是正确的,-imho-回答了问题,但它可以从更多上下文信息中受益,例如,
parseInt()
是,它是做什么的,在哪里可以找到它的文档。当然。静态方法
parseInt()
验证字符串中的字符是否为小数,但第一个字符可能是负号。[链接]请使用编辑功能处理您的问题。请参阅帮助中心中的。
int atoi(String str)
{
    try{
        return Integer.parseInt(str);
    }catch(NumberFormatException ex){
        return -1;   
    }
}