【发布时间】:2010-04-21 13:33:45
【问题描述】:
是否可以将包含数字的char[] 数组转换为
int?
【问题讨论】:
标签: java
是否可以将包含数字的char[] 数组转换为
int?
【问题讨论】:
标签: java
char[] 是否包含组成数字位数的 unicode 字符?在这种情况下,只需从 char[] 创建一个字符串并使用 Integer.parseInt:
char[] digits = { '1', '2', '3' };
int number = Integer.parseInt(new String(digits));
【讨论】:
Integer.parseInt(CharBuffer.wrap(digits),0,digits.length, 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;
}
【讨论】:
char 转换为int。而result *= 10; result += digit; 并不比直截了当的result = result * 10 + digit; 更好
-1 怎么样?
char[] digits = { '0', '1', '2' };
int number = Integer.parseInt(String.valueOf(digits));
这也有效。
【讨论】:
可以将包含数字的char[] 数组转换为int。您可以使用以下不同的实现来转换数组。
使用Integer.parseInt
public static int charArrayToInteger(char[] array){
String arr = new String(array);
int number = Integer.parseInt(arr);
return number;
}
没有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
【讨论】:
另一种性能更高的方法:
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;
}
【讨论】:
result *= 10;替换你的内循环。
digit *= 10; 替换为result *= 10; 吗?
for (int j = ...) 并将所有三行替换为 result *= 10;。
好吧,你甚至可以试试这个
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);
【讨论】: