Java: bir karakterden int değerini ayrıştır


223

Ben sadece bir dizede bir karakterden bir sayı ayrıştırmak için daha iyi bir çözüm olup olmadığını bilmek istiyorum (dizin n karakter bir sayı olduğunu varsayalım).

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

//result: x = 5

(bunun sadece bir örnek olduğunu söylemek işe yaramaz)

Yanıtlar:


444

Deneyin Character.getNumericValue(char).

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

üretir:

x=5

Bununla ilgili güzel bir şey getNumericValue(char), aynı zamanda Doğu Arapça ve Hintçe / Sanskritçe gibi sırasıyla "el٥"ve "el५"nerede ٥ve 5 dizeleri ile çalışmasıdır .


62

Takip etmeyi dene:

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

u char '0' ile çıkarırsanız, ASCII değerinin bilinmesi gerekmez.


1
Bunun sebebi nedir? sonuç ASCI'de '0' ile asci'de char arasındaki çıkarmadır.
ignacio chiazzo

10
@msj Çünkü ascii'deki değerler '0', '1', '2', ...yükseliyor. Örneğin Yani ASCII içinde '0', 48 ise '1' sen alırsan vb Yani 49 olduğunu '2' - '0'gerçekten sadece olsun 50 - 48 = 2. Bu prensibi daha iyi anlamak için bir ASCII tablosuna bakın. Ayrıca, 'x'Java'da karakterin ascii değerini almak anlamına gelir.
Kevin Van Ryckegem

1
@KevinVanRyckegem teşekkür ederim! Neden arıyordu - '0'çalıştı ... Ben Java karakter yorumlanır ya da her türlü nasıl bazı derin sihirli olduğunu düşünüyorum ... Bu gerçekten bir şeyler karmaşık hale üzerine benden bir böyleydi ...
scoots

Bu düzgün bir hile olmasına rağmen, kullanmaktan daha az okunabilirCharacter.getNumericValue
Janac Meena

33

Muhtemelen performans açısından en iyisi, ancak kaba:

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

Karakterinizin bir basamak olduğunu varsayarsanız ve yalnızca Java gibi Unicode'u her zaman kullanan dillerde ...


7
Dizeyle bu deneyin Hindistan'da haneli 5'tir. :)"el५"
Bart Kiers

3
Eminim bu örneği bulmak için çok çalıştınız ... :-) Tamam, Arap olmayan rakamları ayrıştırmanız gerekiyorsa, bu yöntemi kullanmaktan kaçının. Dediğim gibi, kaba. Ancak hala çalıştığı vakaların% 99,999'unda en hızlı yöntemdir.
Alexis Dufrenoy

@AlexisDufrenoy, karakteri çıkarmak neden '0'tamsayı değerini döndürmeli?
Istiaque Ahmed

1
ASCII tablosundaki değerlere bakın char '9' = int 57, char '0' = int 48, bu sonuç '9' - '0' = 57 - 48 = 9
WHDeveloper

1
tıkır tıkır çalışıyor. lol @ counterexample ve yanıtınızı kopyalayan tüm yerliler. ironi.
omikes

16

Sadece '0' (sıfır) karakterinden çıkarılarak bir karakter ('0' ila '9' rakamı) int (0 ila 9) biçimine dönüştürülebilir, örneğin, '5' - '0' int 5'i verir.

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

İkili ANDile birlikte kullanma 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;

'0' = 48 değerindeki ascii değerini char'tan çıkarma

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.