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