Java:从char解析int值


223

我只想知道是否存在更好的解决方案,可以从字符串中的字符解析数字(假设我们知道索引n处的字符是数字)。

String element = "el5";
String s;
s = ""+element.charAt(2);
int x = Integer.parseInt(s);

//result: x = 5

(不用说这只是一个例子)

Answers:


444

尝试Character.getNumericValue(char)

String element = "el5";
int x = Character.getNumericValue(element.charAt(2));
System.out.println("x=" + x);

产生:

x=5

令人高兴的getNumericValue(char)是,它还可以与字符串一起使用,例如"el٥"and "el५"٥并且where 和are分别是东部阿拉伯语和北印度语/梵语中的数字5。


62

请尝试以下操作:

str1="2345";
int x=str1.charAt(2)-'0';
//here x=4;

如果u用char'0'减去,则不需要知道ASCII值。


1
这是什么原因呢?结果是ASCI中的“ 0”与asci中的char之间的减法???
ignacio chiazzo

10
@msj因为'0', '1', '2', ...in ascii中的值是递增的。因此,如“0”的ASCII是48,“1”是49,等等。所以,如果你把'2' - '0'你真的只得到50 - 48 = 2。查看ASCII表以更好地理解该原理。另外,'x'意味着获取Java中字符的ascii值。
Kevin Van Ryckegem '17

1
@KevinVanRyckegem谢谢!我一直在寻找工作的原因- '0'...我认为这对Java解释char或任何其他方式来说是一种深奥的魔力...这确实是我使事情复杂化的一个案例...
踏板

尽管这是一个巧妙的技巧,但它的可读性不及使用Character.getNumericValue
Janac Meena

33

从性能的角度来看,这可能是最好的,但这很粗糙:

String element = "el5";
String s;
int x = element.charAt(2)-'0';

如果您假设字符是数字,并且仅在始终使用Unicode的语言(例如Java)中运行,则此方法有效。


7
尝试使用印度"el५"哪里的数字where 字符串5。:)
Bart Kiers

3
我敢肯定,您会努力找到该示例... :-)好吧,如果您必须解析非阿拉伯数字,请避免使用此方法。就像我说的,这很粗糙。但是,在99.999%的情况下,它仍然是最快的方法。
亚历克西斯·杜弗洛尼

@AlexisDufrenoy,为什么要减去字符'0'返回整数值?
Istiaque Ahmed

1
查看ASCII表中的值
char'9

1
奇迹般有效。大声笑@反例以及所有复制您答案的印第安人。具有讽刺意味的。
忽略


6
String a = "jklmn489pjro635ops";

int sum = 0;

String num = "";

boolean notFirst = false;

for (char c : a.toCharArray()) {

    if (Character.isDigit(c)) {
        sum = sum + Character.getNumericValue(c);
        System.out.print((notFirst? " + " : "") + c);
        notFirst = true;
    }
}

System.out.println(" = " + sum);

0

使用二进制AND0b1111

String element = "el5";

char c = element.charAt(2);

System.out.println(c & 0b1111); // => '5' & 0b1111 => 0b0011_0101 & 0b0000_1111 => 5

// '0' & 0b1111 => 0b0011_0000 & 0b0000_1111 => 0
// '1' & 0b1111 => 0b0011_0001 & 0b0000_1111 => 1
// '2' & 0b1111 => 0b0011_0010 & 0b0000_1111 => 2
// '3' & 0b1111 => 0b0011_0011 & 0b0000_1111 => 3
// '4' & 0b1111 => 0b0011_0100 & 0b0000_1111 => 4
// '5' & 0b1111 => 0b0011_0101 & 0b0000_1111 => 5
// '6' & 0b1111 => 0b0011_0110 & 0b0000_1111 => 6
// '7' & 0b1111 => 0b0011_0111 & 0b0000_1111 => 7
// '8' & 0b1111 => 0b0011_1000 & 0b0000_1111 => 8
// '9' & 0b1111 => 0b0011_1001 & 0b0000_1111 => 9

0
String element = "el5";
int x = element.charAt(2) - 48;

从char减去ascii值'0'= 48

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.