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?

user2640480
quelle
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.

jh314
quelle
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.

Haggra
quelle
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.

Simon Forsberg
quelle
@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.

3ryck
quelle
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;
großes Schwein
quelle
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.

Apraetor
quelle
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
Ajay Verma
quelle
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.

david25272
quelle
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

MohS
quelle
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 
Mayur Gudi
quelle
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));
matua
quelle
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

Shivam Rai
quelle
-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.

Raul Londoño Murillo
quelle
-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);
        }
    }
}
Akash Dhotre
quelle
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