"Java"中将字符(数字)转换为整数的方法是什么?

29

给定以下代码:

    char x = '5';
    int a0 = x - '0'; // 0
    int a1 = Integer.parseInt(x + ""); // 1
    int a2 = Integer.parseInt(Character.toString(x)); // 2
    int a3 = Character.digit(x, 10); // 3
    int a4 = Character.getNumericValue(x); // 4
    System.out.printf("%d %d %d %d %d", a0, a1, a2, a3, a4);

(版本4由casablanca贡献)

你认为将char转换为int的"最佳方式"是什么? ("最佳方式" ≈ 惯用方式)

我们不是将char的实际数值转换,而是将其表示值转换。

例如:

convert('1') -> 1
convert('2') -> 2
....

3
我相信任何像我一样使用古老的C和Pascal编程语言的人都会选择第一个选项。 - Nikita Rybak
1
@Nikita:我确实来自那些“古老的C和Pascal东西”,但除非性能绝对关键,否则我更喜欢比x - '0'更具表现力的方式。 - casablanca
1
这个回答解决了你的问题吗?Java:从char中解析int值 - user202729
6个回答

47

16

我强烈建议使用Character.digit


3
请解释推理依据。 - James Wierzba

8
第一种方法。它是最轻量级和直接的方法,类似于你可能在其他(低级)语言中所做的操作。当然,它的错误处理还有待改进。

4
如果速度很关键(而不是验证),您可以将结果合并,例如:
char d0 = '0';
char d1 = '4';
char d2 = '2';
int value = d0 * 100 + d1 * 10 + d2 - '0' * 111;

2
我喜欢'0' * 111这个值 :-) - dedek

-1

将字符转换为Ascii码,然后减去48。

(int) '7' would be 55 
((int) '7') - 48 = 7 
((int) '9') - 48 = 9 

-2
将有效数字的字符转换为int值的最佳方法如下。如果c大于9,则c不是数字。我所知道的没有比这更快的方法了。在ASCII代码0-9(48-57)中的任何数字,按位异或'0'(48)将始终产生0-9。从0到65535,只有48到57以各自的顺序产生0到9。
int charValue = (charC ^ '0');

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