Java:charからのint値の解析


223

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

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

//result: x = 5

(これは単なる例であることは言うまでもありません)

回答:


444

お試しください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です。


62

以下を試してください:

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

uがchar '0'で減算する場合、ASCII値は既知である必要はありません。


1
その理由は何ですか?結果は、ASCIの「0」とasciの文字の間の減算です???
ignacio chiazzo

10
@msj '0', '1', '2', ...ascii の値が昇順であるため。たとえば、ASCIIの「0」は48、「1」は49などです。したがって、'2' - '0'実際に取得する場合は、を取得するだけです50 - 48 = 2。この原則をよりよく理解するために、ASCIIテーブルを見てください。また、'x'Javaで文字のASCII値を取得することも意味します。
Kevin Van Ryckegem

1
@KevinVanRyckegemありがとうございます!私は、なぜ探していた- '0'働いていた...私はそれがJavaの文字を解釈するか、どのような方法でいくつかの深い魔法だと思った...これは本当に何かを複雑にわたり、私の場合だった...
scoots

これはきちんとしたトリックですが、使用するよりも読みにくくなりますCharacter.getNumericValue
Janac Meena

33

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

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

あなたの文字が数字であると想定し、Javaのように常にUnicodeを使用する言語でのみ機能します...


7
インドの5は数字の文字列"el५"でそれを試してください。:)
Bart Kiers、2011

3
この例を見つけるのに一生懸命働いたと思います... :-)わかりました。もし、アラブ以外の数字を解析する必要があるなら、この方法は避けてください。私が言ったように、それは荒いです。しかし、それが機能する99.999%のケースでは、依然として最速の方法です。
Alexis Dufrenoy、2011

@AlexisDufrenoy、減算文字'0'が整数値を返すのはなぜですか?
Istiaque Ahmed 2017

1
ASCIIテーブルの値を見てください。char '9' = int 57、char '0' = int 48、これは '9'-'0' =
57-48

1
魅力のように動作します。笑@反例とあなたの答えをコピーしたすべてのインディアン。皮肉。
18

16

char '0'(zero)を単に減算することで、char(数字 '0'から '9'まで)をint(0から9)に変換できます。たとえば、 '5'-'0'はint 5を与えます。

String str = "123";

int a=str.charAt(1)-'0';

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

でバイナリANDを使用する0b1111

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から「0」のASCII値= 48を引く

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.