Java字符数组转整型

14

是否有可能将包含数字的char[]数组转换为int

6个回答

28

这个char[]包含了数字的Unicode字符吗?如果是这样,只需从char[]创建一个字符串,并使用Integer.parseInt:

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

2
从Java 9开始,您可以使用Integer.parseInt(CharBuffer.wrap(digits),0,digits.length, 10),这避免了复制数组。 - Holger

11

更高的性能和更干净的代码(而且无需分配新的字符串对象):

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;
}

2
不需要将char强制转换为int。而result *= 10; result += digit;并不比直接的result = result * 10 + digit;更好。 - Holger
-1 怎么样? - Maxim

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

这也可以运行。

如果字符数组很长,例如1534236469,则此方法将无法正常工作。您需要使用Long.parseLong(String.valueOf(digits))。 - Dynamic Meta

2

可以将包含数字的char[]数组转换为int。您可以使用以下不同的实现来进行转换。

  1. Using Integer.parseInt

    public static int charArrayToInteger(char[] array){
        String arr = new String(array);
        int number = Integer.parseInt(arr);
    
        return number;
    }
    
  2. Without Integer.parseInt

    public static int charArrayToInt(char[] array){
        int result = 0;
        int length = array.length - 1;
    
        for (int i = 0; i <= length; i++)
        {
             int digit = array[i] - '0'; //we don't want to cast by using (int)
             result *= 10;
             result += digit;
        }
        return result;
    }
    

例子:

 public static void main(String []args){
    char[] array = {'1', '2', '3', '4', '5'};
    int result = 0;

    result = charArrayToInteger(array);
    System.out.println("Using Integer.parseInt: " + result);

    result = charArrayToInt(array);
    System.out.println("Without Integer.parseInt: " + result);

 }

输出:

Using Integer.parseInt: 12345
Without Integer.parseInt: 12345

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;
}

2
你可以简单地用 result *= 10; 替换你的内部循环。 - Joachim Sauer
你的意思是将 digit *= 10; 替换为 result *= 10; 吗? - Nikita Koksharov
2
不,你可以摆脱整个内部循环(for (int j = ...),并用result *= 10;替换所有三行。 - Joachim Sauer
  1. chars[i] -'0'比chars[i] & 0xF更快速。 2.你可以将内部的for循环替换为result*=10;
- Geker

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);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接