web-dev-qa-db-ja.com

Java:charからint値を解析する

文字列内の文字から数値を解析するためのより良い解決策があるかどうかを知りたいだけです(インデックスnの文字が数値であることがわかっていると仮定して)。

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

//result: x = 5

(それは単なる例であることは言うまでもない)

204
Noya

Character.getNumericValue(char) を試してください。

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

生成するもの:

x=5

getNumericValue(char)の良い点は、"el٥""el५"のような文字列でも動作することです。ここで、٥は、それぞれ東アラビア語とヒンディー語/サンスクリット語の数字5です。

422
Bart Kiers

以下を試してください。

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

uが文字 '0'で減算される場合、ASCIIの値を知る必要はありません。

56
vashishatashu

これはおそらくパフォーマンスの観点からは最善ですが、それは大雑把です。

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

あなたのキャラクターが数字であると仮定し、Javaのように常にUnicodeを使用する言語でのみ有効です。

32
Alexis Dufrenoy

単にchar '0'(ゼロ)を引くことによって、char(数字 '0'から '9'まで)をint(0から9)に変換できます。例えば、 '5' - '0'はint 5になります。

String str = "123";

int a=str.charAt(1)-'0';
16
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);
6
John McDonald
String element = "el5";
int x = element.charAt(2) - 48;

'0' = 48のASCII値をcharから引く

0
Saurabh

0b1111でバイナリANDを使う:

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
Andriy Tolstoy