Tekens converteren naar gehele getallen in Java

Kan iemand mij uitleggen wat hier aan de hand is:

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

Hiermee wordt i: 43 ch:-1afgedrukt. Betekent dit dat ik op primitieve conversies moet vertrouwen om charnaar intte converteren? Dus hoe kan ik een Characterconverteren naar Integer?

Bewerken:Ja, ik weet het Character.getNumericValueretourneert -1als het geen numerieke waarde is en dat lijkt me logisch. De vraag is: waarom levert het uitvoeren van primitieve conversies 43op?

Edit2:43is de ASCII voor +, maar ik verwacht dat de cast niet zal slagen, net als getNumericValueis niet gelukt. Anders betekent dit dat er twee semantisch equivalente manieren zijn om dezelfde bewerking uit te voeren, maar met verschillende resultaten?


Antwoord 1, autoriteit 100%

Character.getNumericValue(c)

De java.lang.Character.getNumericValue(char ch)retourneert de intwaarde die het opgegeven Unicode-teken vertegenwoordigt. Het teken '\u216C'(het Romeinse cijfer vijftig) geeft bijvoorbeeld een int als resultaat met een waarde van 50.

De letters AZ in hoofdletters ('\u0041' through '\u005A'), kleine letters ('\u0061' through '\u007A')en vol breedtevariant ('\uFF21' through '\uFF3A' and '\uFF41' through '\uFF5A')-formulieren hebben numerieke waarden van 10 tot 35. Dit is onafhankelijk van de Unicode-specificatie, die niet numerieke waarden toewijzen aan deze char-waarden.

Deze methode retourneert de numerieke waarde van het teken, als a
niet-negatieve int-waarde;

-2 als het teken een numerieke waarde heeft die geen niet-negatief geheel getal is;

-1 als het teken geen numerieke waarde heeft.

En hieris de link .


Antwoord 2, autoriteit 46%

Zoals de documentatie duidelijk aangeeft, retourneert Character.getNumericValue()de waarde van het teken als een cijfer.
Het geeft -1terug als het teken geen cijfer is.

Als je het numerieke Unicode-codepunt van een Character-object in een doos wilt krijgen, moet je het eerst uit de doos halen:

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

Antwoord 3, autoriteit 39%

Probeer een van de onderstaande opties. Deze zouden moeten werken:

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

Antwoord 4, autoriteit 2%

Van de Javadoc voor Character#getNumericValue:

Als het teken geen numerieke waarde heeft, wordt -1 geretourneerd.
Als het teken een numerieke waarde heeft die niet kan worden weergegeven als a
niet-negatief geheel getal (bijvoorbeeld een fractionele waarde), dan is -2
teruggestuurd.

Het teken +heeft geen numerieke waarde, dus je krijgt -1.

Bijwerken:

De reden dat primitieve conversie u 43 oplevert, is dat het teken ‘+’ is gecodeerd als het gehele getal 43.


Antwoord 5

43 is het dec-ascii-nummer voor het “+”-symbool. Dat verklaart waarom je een 43 terug krijgt.
http://en.wikipedia.org/wiki/ascii


Antwoord 6

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;
}

Other episodes