programing tip

Java에서 문자를 정수로 변환

itbloger 2020. 12. 14. 07:57
반응형

Java에서 문자를 정수로 변환


누군가 여기서 무슨 일이 일어나고 있는지 설명해 주시겠습니까?

char c = '+';
int i = (int)c;
System.out.println("i: " + i + " ch: " + Character.getNumericValue(c));

이것은 인쇄합니다 i: 43 ch:-1. 나는 변환하는 원시 변환에 의존해야 그 의미 하는가 charint? 그래서 어떻게 변환 할 CharacterInteger있습니까?

편집 :, 숫자 값이 아닌 경우 Character.getNumericValue반환 -1되는 것을 알고 있습니다. 질문은 왜 원시 변환을 수행하면 반환 43됩니까?

Edit2 : 43 는 ASCII +이지만 성공 getNumericValue하지 못한 것처럼 캐스트가 성공하지 못할 것으로 예상합니다 . 그렇지 않으면 동일한 작업을 수행하지만 결과가 다른 두 가지 의미 론적 동등한 방법이 있음을 의미합니까?


Character.getNumericValue(c)

java.lang.Character.getNumericValue(char ch)수익 int지정된 유니 코드 문자가 나타내는 값입니다. 예를 들어 문자 '\u216C'(로마 숫자 50)는 값이 50 인 int를 반환합니다.

대문자 ('\u0041' through '\u005A'), 소문자 ('\u0061' through '\u007A')및 전체 너비 변형 ('\uFF21' through '\uFF3A' and '\uFF41' through '\uFF5A')형식의 AZ 문자 는 10에서 35까지의 숫자 값을 갖습니다. 이는 이러한 char 값에 숫자 값을 할당하지 않는 유니 코드 사양과 무관합니다.

이 메서드는 문자의 숫자 값을 음이 아닌 int 값으로 반환합니다.

문자에 음이 아닌 정수가 아닌 숫자 값이있는 경우 -2;

문자에 숫자 값이 없으면 -1입니다.

그리고 여기 에 링크가 있습니다.


문서에 명확하게 나와 있듯이 Character.getNumericValue()문자 값을 숫자로 반환합니다. 문자가 숫자가 아닌 경우
반환 -1됩니다.

박스형 Character객체 의 숫자 유니 코드 코드 포인트를 얻으려면 먼저 박스 를 풀어야합니다.

int value = (int)c.charValue();

아래 중 하나를 시도하십시오. 작동해야합니다.

int a = Character.getNumericValue('3');
int a = Integer.parseInt(String.valueOf('3');

Javadoc에서 Character#getNumericValue:

문자에 숫자 값이 없으면 -1이 반환됩니다. 문자에 음이 아닌 정수로 표현할 수없는 숫자 값 (예 : 분수 값)이있는 경우 -2가 ​​반환됩니다.

문자 +에 숫자 값이 없으므로 -1이됩니다.

최신 정보:

원시 변환이 43을 제공하는 이유는 문자 '+'가 정수 43으로 인코딩되기 때문입니다.


43은 "+"기호의 dec ASCII 번호입니다. 그것은 당신이 43을 돌려받는 이유를 설명합니다. http://en.wikipedia.org/wiki/ASCII


public class IntergerParser {

public static void main(String[] args){
String number = "+123123";
System.out.println(parseInt(number));
}

private static int parseInt(String number){
    char[] numChar = number.toCharArray();
    int intValue = 0;
    int decimal = 1;
    for(int index = numChar.length ; index > 0 ; index --){
        if(index == 1 ){
            if(numChar[index - 1] == '-'){
                return intValue * -1;
            } else if(numChar[index - 1] == '+'){
                return intValue;
            }
        }
        intValue = intValue + (((int)numChar[index-1] - 48) * (decimal));
        System.out.println((int)numChar[index-1] - 48+ " " + (decimal));
        decimal = decimal * 10;
    }
    return intValue;
}

참고 URL : https://stackoverflow.com/questions/19388037/converting-characters-to-integers-in-java

반응형