2010-04-21 102 views

回答

16

char[]是否包含组成数字位数的Unicode字符?在这种情况下,简单地从char[]创建一个字符串和使用的Integer.parseInt:

char[] digits = { '1', '2', '3' }; 
int number = Integer.parseInt(new String(digits)); 
1

与更高性能的另一种方式:

char[] digits = { '1', '2', '3' }; 

int result = 0; 
for (int i = 0; i < chars.length; i++) { 
    int digit = ((int)chars[i] & 0xF); 
    for (int j = 0; j < chars.length-1-i; j++) { 
     digit *= 10; 
    } 
    result += digit; 
} 
+1

你可以简单地用'结果*取代你的内循环= 10; '。 – 2012-07-16 13:35:37

+0

你的意思是将'digit * = 10;'替换为'result * = 10;'? – 2012-07-18 11:39:20

+1

不,你可以去掉*整个内部循环('for(int j = ...'),并用'result * = 10;'替换所有的三行。 – 2012-07-18 11:49:57

10

甚至更​​高的性能和更干净的代码(没有需要分配一个新的String对象):

int charArrayToInt(char []data,int start,int end) throws NumberFormatException 
{ 
    int result = 0; 
    for (int i = start; i < end; i++) 
    { 
     int digit = (int)data[i] - (int)'0'; 
     if ((digit < 0) || (digit > 9)) throw new NumberFormatException(); 
     result *= 10; 
     result += digit; 
    } 
    return result; 
} 
6
char[] digits = { '0', '1', '2' }; 
int number = Integer.parseInt(String.valueOf(digits)); 

这也适用。

0

您可以使用像这样得到逐一诠释

char[] chars = { '0', '1', '2' }; 
int y=0; 
for (int i = 0; i < chars.length; i++) { 
    y = Integer.parseInt(String.valueOf(chars[i])); 
    System.out.println(y); 
} 
0

那么,你可以尝试连这

char c[] = {'1','2','3'}; 
    int total=0,x=0,m=1; 
    for(int i=c.length-1;i>=0;i--) 
    { 
     x = c[i] - '0'; 
     x = x*m; 
     m *= 10; 
     total += x; 
    } 
    System.out.println("Integer is " + total);