자바 : 문자에서 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;

문자 '0'으로 u를 빼면 ASCII 값을 알 필요가 없습니다.


1
그 이유는 무엇입니까? 결과는 ASCI에서 '0'과 asci에서 char 사이의 빼기입니다. ??
— ignacio chiazzo

10
@msj '0', '1', '2', ...ascii 의 값 이 오름차순 이므로 . 예를 들어 ascii의 '0'은 48, '1'은 49 등입니다. 따라서 가져 '2' - '0'가면 실제로 얻을 수 50 - 48 = 2있습니다. 이 원리를 더 잘 이해하려면 ASCII 테이블을 살펴보십시오. 또한 'x'Java에서 문자의 ASCII 값을 얻는 것을 의미합니다.
— 케빈 반 Ryckegem

1
트윗 담아 가기 내가 왜 찾고 있었던 - '0'일 ... 나는 그것이 자바 문자를 해석하거나 어떤 방법에서 약간의 깊은 마법 알았는데 ...이 진정으로 무언가를 복잡 이상 날의 경우는 ...
— 돌진

이것은 깔끔한 트릭이지만, 사용하는 것보다 읽기 Character.getNumericValue
— 쉽지 않습니다

33

아마도 성능 측면에서 최고 일 것입니다.

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

문자가 숫자라고 가정하고 Java와 같이 항상 유니 코드를 사용하는 언어에서만 작동합니다 ...


7
인도에서 숫자 5가 있는 문자열 "el५"로 시도하십시오 ५. :)
— Bart Kiers

3
이 예제를 찾기 위해 열심히 노력했다고 확신합니다 ... :-) 좋아, 아라비아 숫자가 아닌 숫자를 구문 분석 해야하는 경우이 방법을 피하십시오. 내가 말했듯이, 그것은 거칠다. 그러나 여전히 작동하는 경우의 99.999 %에서 가장 빠른 방법입니다.
— Alexis Dufrenoy

@AlexisDufrenoy, 문자를 빼면 '0'정수 값을 반환 해야하는 이유는 무엇입니까?
— Istiaque Ahmed

1
ASCII 테이블 char '9'= int 57, char '0'= int 48의 값을 보면 '
— 9'-

1
매력처럼 작동합니다. lol @ counterexample 및 귀하의 답변을 복사 한 모든 인디언. 아이러니.
— omikes

16

단순히 문자 '0'(제로)을 빼면 숫자 '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에서 ascii 값 '0'= 48 빼기

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.