Konvertieren Sie int in char in Java


124

Unten ist ein Code-Snippet,

int a = 1;
char b = (char) a;
System.out.println(b);

Aber was ich bekomme, ist eine leere Ausgabe.

int a = '1';
char b = (char) a;
System.out.println(b);

Ich werde 1 als meine Ausgabe bekommen.

Kann jemand das erklären? Und was soll ich tun, wenn ich ein int wie im ersten Snippet in ein Zeichen konvertieren möchte?


9
" Ein int in ein Zeichen umwandeln? " Vielleicht b = (char)('0' + a)aber nur für 0 <= a <= 9.
Johnchen902

6
Der Dezimalwert 01 ist ein nicht druckbares Zeichen. es funktioniert richtig.
Apraetor

Antworten:


108
int a = 1;
char b = (char) a;
System.out.println(b);

druckt das Zeichen mit dem ASCII-Wert 1 aus (Zeichen am Anfang der Überschrift, das nicht gedruckt werden kann).

int a = '1';
char b = (char) a;
System.out.println(b);

druckt das Zeichen mit dem ASCII-Wert 49 aus (einer entspricht '1')

Wenn Sie eine Ziffer (0-9) konvertieren möchten, können Sie 48 hinzufügen und umwandeln oder ähnliches Character.forDigit(a, 10);.

Wenn Sie einen intas in ascii-Wert konvertieren möchten , können Sie diesen Character.toChars(48)beispielsweise verwenden.


2
System.out.println('b'+3);Wie komme ich b3stattdessen 101mit println zurecht? auf andere Weise statt printf?
Asif Mushtaq

2
@UnKnown Sie müssen es wie folgt zu einem String anstelle eines Zeichens machen. System.out.println ("b" + 3);
Haggra

Character.toCharsarbeitet mit Unicode-Codepunkten, nicht mit ASCII-Werten. Sie erhalten dasselbe (nur für BMP), wenn Sie nur int in char umwandeln.
Schwachstellen

55

Meine Antwort ähnelt der Antwort von jh314, aber ich werde es etwas genauer erklären.

Was Sie in diesem Fall tun sollten, ist:

int a = 1;
char b = (char)(a + '0');
System.out.println(b);

Hier haben wir '0' verwendet, da Zeichen tatsächlich durch ASCII-Werte dargestellt werden. '0' ist ein Zeichen und wird durch den Wert 48 dargestellt.

Wir haben getippt (a + '0')und um diese zu addieren, hat Java '0' in seinen ASCII-Wert konvertiert, der 48 und a 1 ist, also ist die Summe 49. Dann haben wir Folgendes getan:

(char)(49)

Wir gegossen intzu char. Das ASCII-Äquivalent von 49 ist '1'. Sie können jede Ziffer auf diese Weise in Zeichen konvertieren. Dies ist intelligenter und besser als die Verwendung einer .toString()Methode und das anschließende Subtrahieren der Ziffer nach .charAt()Methode.


42

Anscheinend suchen Sie nach der Character.forDigitMethode:

final int RADIX = 10;
int i = 4;
char ch = Character.forDigit(i, RADIX);
System.out.println(ch); // Prints '4'

Es gibt auch eine Methode, die von einem Zeichen zurück in ein int konvertieren kann:

int i2 = Character.digit(ch, RADIX);
System.out.println(i2); // Prints '4'

Beachten Sie, dass Sie durch Ändern von RADIXauch hexadezimal (Radix 16) und alle Radixe bis zu 36 (oder Character.MAX_RADIXauch bekannt als) unterstützen können.


@ProgrammingNub Definieren Sie "den Wert des Int". Möchten Sie nicht, dass die Ziffer 4 gedruckt wird? Oder möchten Sie den Ascii-Wert des int drucken, damit 65gedruckt wird A? Weil meine Antwort hier das erwartete Verhalten für die Anforderungen dieser Frage druckt. Siehe ideone.com/09LAFR
Simon Forsberg

10
int a = 1;
char b = (char) a;
System.out.println(b);

hola, nun, ich habe das gleiche Problem durchgemacht, aber was ich getan habe, war der folgende Code.

int a = 1
char b = Integer.toString(a).charAt(0);
System.out.println(b);

Damit erhalten Sie den Dezimalwert als Zeichentyp. Ich habe charAt () mit Index 0 verwendet, weil der einzige Wert in diesem String 'a' ist und wie Sie wissen, die Position von 'a' in diesem String bei 0 beginnt.

Entschuldigung, wenn mein Englisch nicht gut erklärt ist, hoffe es hilft dir.


3
int a = 1;
char b = (char) (a + 48);

In ASCII hat jedes Zeichen eine eigene Nummer. Und char '0' ist 48 für Dezimalzahl, '1' ist 49 und so weiter. Also wenn

char b = '2';
int a = b = 50;

1

Niemand hat hier die eigentliche "Frage" beantwortet: Sie konvertieren int korrekt in char; In der ASCII-Tabelle ist ein Dezimalwert von 01 "Beginn der Überschrift", ein nicht druckbares Zeichen. Versuchen Sie, eine ASCII-Tabelle nachzuschlagen und einen int-Wert zwischen 33 und 7E zu konvertieren. das gibt dir Charaktere zum Anschauen.


1

Wenn Sie cast integer in char eingeben, wird der ASCII-Wert dieses Int zurückgegeben (gehen Sie zum besseren Verständnis einmal die ASCII-Tabelle durch).

    int a=68;
    char b=(char)a;

    System.out.println(b);//it will return ascii value of 68

    //output- D

2
Art von .... charist eine UTF-16-Codeeinheit. 68 als UTF-16-Codeeinheit ist die einzige Codeeinheit, die zur Darstellung des Unicode-Codepunkts U + 0044 benötigt wird . System.out ändert die Codierung von Text in die Standardcodierung (vermutlich passend zu dem Terminal / der Konsole, in dem das Programm ausgeführt wird). println nimmt ein Zeichen und versucht es zu codieren. Da das Zeichen ein vollständiger Codepunkt ist, kann es versuchen. Da U + 0044 ein Zeichen in fast allen Zeichensätzen ist, sollte es erfolgreich sein, es ungehindert zum Terminal zu bringen. Nichts mit ASCII zu tun.
Tom Blodget

0

In Java ein Zeichen ist ein int. Ihr erstes Snippet druckt das Zeichen aus, das dem Wert 1 im Standard-Zeichenkodierungsschema (wahrscheinlich Unicode) entspricht. Das Unicode-Zeichen U + 0001 ist ein nicht druckbares Zeichen, weshalb Sie keine Ausgabe sehen.

Wenn Sie das Zeichen '1' ausdrucken möchten, können Sie den Wert von '1' in dem von Ihnen verwendeten Codierungsschema nachschlagen. In Unicode ist dies 49 (das gleiche wie in ASCII). Dies funktioniert jedoch nur für die Ziffern 0-9.

Möglicherweise ist es besser, einen String als ein Zeichen und die in Java integrierte toString()Methode zu verwenden:

int a = 1;
String b = toString(a);
System.out.println(b);

Dies funktioniert unabhängig von Ihrer Systemcodierung und für mehrstellige Zahlen.


1
Entschuldigung, aber ein Zeichen ist kein int, da es aus einer anderen Anzahl von Bytes besteht (schnelle Darstellung von char-int - Stapelüberlauf ). Ein Zeichen kann durch eine Zahl dargestellt werden. Sie haben Recht, aber es ist keine Ganzzahl.
Morcheln

Ich denke auch, dass die zweite Zeile "String b = Integer.toString (a);"
Fehlerhaft

Der char-Datentyp ist in java.lang.Character sowie seine Beziehung zu int- und unicode-Codepunkten und Codeeinheiten gut definiert .
Ian

0

Wenn Sie ASCII-Zeichen basierend auf ihrem ASCII-Code drucken möchten und nicht darüber hinausgehen möchten (wie Unicode-Zeichen), können Sie Ihre Variable als Byte definieren und dann die Konvertierung (char) verwenden. dh:

public static void main(String[] args) {
    byte b = 65;
    for (byte i=b; i<=b+25; i++) {
        System.out.print((char)i + ", ");
    }

Übrigens ist der ASCII-Code für den Buchstaben 'A' 65


0

Stellen Sie sicher, dass der ganzzahlige Wert der ASCII-Wert eines Alphabets / Zeichens ist.

Wenn nicht, dann mach es.

for e.g. if int i=1

Fügen Sie dann 64 hinzu, sodass der Wert 65 = ASCII von 'A' wird. Verwenden Sie dann

char x = (char)i;

print x

// 'A' will be printed 

0

Wenn es sich um Klassentypen handelt - nicht um Grundelemente - muss der folgende Trick ausgeführt werden:

Integer someInt;
Character someChar;

someChar = (char)Integer.parseInt(String.valueOf(someInt));

Sie müssen es dabei nicht zu einem String machen, und die Anzahl der Klammern stimmt nicht überein.
Simon Forsberg

Simon, "Klammern". Wie dann beraten?
6.

-1

Schauen Sie sich das folgende Programm für ein vollständiges Konvertierungskonzept an

class typetest{
    public static void main(String args[]){
        byte a=1,b=2;
        char c=1,d='b';
        short e=3,f=4;
        int g=5,h=6;
        float i;
        double k=10.34,l=12.45;
        System.out.println("value of char variable c="+c);
        // if we assign an integer value in char cariable it's possible as above
        // but it's not possible to assign int value from an int variable in char variable 
        // (d=g assignment gives error as incompatible type conversion)
        g=b;
        System.out.println("char to int conversion is possible");
        k=g;
        System.out.println("int to double conversion is possible");
        i=h;
        System.out.println("int to float is possible and value of i = "+i);
        l=i;
        System.out.println("float to double is possible");
    }
}

hoffe, es wird zumindest etwas helfen


-2

Wenn Sie ein Zeichen in die entsprechende Ganzzahl konvertieren möchten, können Sie Folgendes tun:

int a = (int) 'a';
char b = (char) a;
System.out.println(b);

Dies liegt daran, dass es in ASCII einige Elemente gibt, die nicht normal gedruckt werden können.

Beispielsweise sind die Zahlen 97 bis 122 ganze Zahlen, die den Kleinbuchstaben a bis z entsprechen.


-2
public class String_Store_In_Array 
{
    public static void main(String[] args) 
    {
        System.out.println(" Q.37 Can you store string in array of integers. Try it.");

        String str="I am Akash";
        int arr[]=new int[str.length()];
        char chArr[]=str.toCharArray();
          char  ch;
        for(int i=0;i<str.length();i++)
        {

            arr[i]=chArr[i];
        }
        System.out.println("\nI have stored it in array by using ASCII value");
        for(int i=0;i<arr.length;i++)
        {

            System.out.print(" "+arr[i]);
        }
        System.out.println("\nI have stored it in array by using ASCII value to original content");
        for(int i=0;i<arr.length;i++)
        {
             ch=(char)arr[i];

            System.out.print(" "+ch);
        }
    }
}

2
Bitte geben Sie eine Erklärung anstelle eines Code-Dumps an.
Jules Dupont

Während dieser Nur-Code-Beitrag möglicherweise die Frage beantwortet, fügen Sie bitte eine Erklärung hinzu, warum dies so ist. Dies wird zukünftigen Benutzern helfen, die Antwort für ihre Situation zu bewerten.
Tom Brunberg
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.