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.