Java'da int'i char karakterine dönüştür


124

Aşağıda bir kod parçası var,

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

Ama aldığım şey boş çıktı.

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

Çıktım olarak 1 alacağım.

Biri bunu açıklayabilir mi? Ve bir int'i ilk kod parçacığındaki gibi bir karaktere dönüştürmek istersem, ne yapmalıyım?


9
" Bir int'i bir karaktere dönüştür? " Belki b = (char)('0' + a)ama sadece için 0 <= a <= 9.
— johnchen902

6
Ondalık değer 01, yazdırılmayan bir karakterdir; düzgün çalışıyor.
— apraetor

Yanıtlar:


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

ascii değeri 1 olan karakterin çıktısını alacaktır (basılamayan başlık karakterinin başlangıcı).

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

char'ı ascii değeri 49 ile yazdırır (biri '1'e karşılık gelir)

Bir rakamı (0-9) dönüştürmek istiyorsanız, ona 48 ekleyebilir ve döküm yapabilirsiniz veya benzeri bir şey yapabilirsiniz. Character.forDigit(a, 10); .

Bir intascii değerinde bir ascii değerini dönüştürmek istiyorsanız, Character.toChars(48)örneğin kullanabilirsiniz .


2
System.out.println('b'+3);b3bunun yerine 101println kullanarak nasıl elde edebilirim ? bunun yerine başka bir yol var mı?
— Asif Mushtaq

2
@UnKnown Bunu bir karakter yerine aşağıdaki gibi bir dizge yapmanız gerekir: System.out.println ("b" + 3);
— Haggra

Character.toCharsASCII değerlerinde değil, Unicode kod noktalarında çalışır. İnt'i char'a çevirirseniz aynı şeyi elde edersiniz (yalnızca BMP için).
— zayıflık

55

Cevabım jh314'ün cevabına benzer, ancak biraz daha derinlemesine açıklayacağım.

Bu durumda yapmanız gereken şudur:

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

Burada '0' kullandık çünkü karakterler aslında ASCII değerleriyle temsil ediliyor. '0' bir karakterdir ve 48 değeriyle temsil edilir.

Yazdık (a + '0')ve bunları toplamak için Java '0'ı ASCII değerine çevirdi 48 ve a 1 yani toplam 49 oldu. Sonra yaptığımız şuydu:

(char)(49)

Biz dökme intiçin char. 49'un ASCII eşdeğeri '1'dir. Bu şekilde herhangi bir rakamı karaktere dönüştürebilirsiniz ve .toString()yöntemi kullanmaktan ve ardından rakamı .charAt()yöntemle çıkarmaktan daha akıllı ve daha iyi bir yoldur .


42

Character.forDigitYöntemi arıyorsunuz gibi görünüyor :

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

Bir karakterden int'e dönüştürebilen bir yöntem de vardır:

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

Not olduğunu değiştirerek RADIX36'ya da destekleyebilir onaltılık (radix 16) ve her türlü tabanını yukarı (ya Character.MAX_RADIXda olarak bilinir gibi).


@ProgrammingNub "int'in değerini" tanımlayın. . 4 rakamı basmasını istemez misiniz? Veya int'in Ascii değerini yazdırmak istersiniz, böylece 65yazdırılır A? Çünkü buradaki cevabım, bu sorunun gereksinimleri için beklenen davranışı yazdırıyor. Bkz ideone.com/09LAFR
— Simon Forsberg

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

hola, ben de aynı problemi yaşadım ama yaptığım şey aşağıdaki koddu.

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

Bununla ondalık değeri bir karakter türü olarak elde edersiniz. 0 dizininde charAt () kullandım çünkü bu Dize'deki tek değer 'a' ve bildiğiniz gibi 'a'nın bu Dize içindeki konumu 0'dan başlıyor.

İngilizcem iyi açıklanmamışsa özür dilerim, umarım sana yardımcı olur.


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

ASCII'de her karakterin kendi numarası vardır. Ve '0' ondalık sayı için 48, '1' 49'dur ve bu böyle devam eder. Öyleyse

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

1

Burada kimse gerçek "soruyu" yanıtlamadı: int'i doğru şekilde karaktere dönüştürüyorsunuz; ASCII tablosunda 01'in ondalık değeri, yazdırılmayan bir karakter olan "başlığın başlangıcıdır". Bir ASCII tablosuna bakmayı ve 33 ile 7E arasında bir int değerini dönüştürmeyi deneyin; bu size bakmanız için karakterler verecektir.


1

Char'a cast integer yazdığınızda, bu int'in ascii değerini döndürür (daha iyi anlamak için ascii tablosunu gözden geçirin)

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

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

    //output- D

2
Sıralama .... charbir UTF-16 kod birimidir. Bir UTF-16 kod birimi olarak 68, Unicode kod noktası U + 0044'ü temsil etmek için gereken tek kod birimidir . System.out, metnin kodlamasını varsayılan kodlamaya değiştirir (muhtemelen programın içinde çalıştığı terminal / konsolu eşleştirecektir). println bir karakter alır ve onu kodlamaya çalışır. Char tam bir kod noktası olduğu için deneyebilir. U + 0044 hemen hemen tüm karakter kümelerinde bir karakter olduğundan, onu terminale kararsız hale getirmede başarı sağlanmalıdır. ASCII ile ilgisi yok.
— Tom Blodget

0

Java, bir kömür olduğunu bir int. İlk kod parçanız, varsayılan karakter kodlama şemasında (muhtemelen Unicode'dur) 1 değerine karşılık gelen karakteri yazdırır. Unicode karakter U + 0001, yazdırılmayan bir karakterdir, bu nedenle herhangi bir çıktı görmezsiniz.

'1' karakterini yazdırmak istiyorsanız, kullandığınız kodlama şemasında '1' değerini arayabilirsiniz. Unicode'da bu 49'dur (ASCII ile aynı). Ancak bu yalnızca 0-9 arasındaki rakamlar için çalışacaktır.

Bir karakter yerine bir String kullanarak ve Java'nın yerleşik toString()yöntemini kullanarak daha iyi olabilirsiniz :

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

Bu, sistem kodlamanız ne olursa olsun çalışacak ve çok basamaklı sayılar için çalışacaktır.


1
Maalesef bir karakter, farklı sayıda bayttan oluştuğu için bir int değildir (hızlı ref. Char-int gösterimi - stackoverflow ). Bir karakter bir sayı ile temsil edilebilir, haklısınız, ancak bu bir tamsayı değil.
— morels

Ayrıca, ikinci satırın "String b = Integer.toString (a);" şeklinde okunması gerektiğini düşünüyorum.
— hatalı

Char veri türü java.lang.Character'de ve int ve unicode kod noktaları ve kod birimleriyle olan ilişkisinde iyi tanımlanmıştır .
— Ian

0

ascii karakterlerini ascii kodlarına göre yazdırmak ve bunun ötesine geçmek istemiyorsanız (unicode karakterleri gibi), değişkeninizi bir bayt olarak tanımlayabilir ve ardından (char) dönüştürmeyi kullanabilirsiniz. yani:

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

BTW, 'A' harfi için ascii kodu 65


0

Tamsayı değerinin bir alfabenin / karakterin ASCII değeri olduğundan emin olun.

Değilse o zaman yap.

for e.g. if int i=1

sonra buna 64 ekleyin, böylece 65 = ASCII 'A' değeri olur.

char x = (char)i;

print x

// 'A' will be printed 

0

Sınıf türlerinden bahsediyorsak - ilkellerden değil, şu numara yapılmalıdır:

Integer someInt;
Character someChar;

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

İşlemde bunu bir String yapmanıza gerek yok ve uyumsuz sayıda paranteziniz var.
— Simon Forsberg

Simon, "parantez". Nasıl tavsiye edersiniz?
— matua

-1

tam dönüşüm konsepti için aşağıdaki programa bakın

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

umarım, en azından bir şeye yardımcı olur


-2

Bir karakteri karşılık gelen tam sayıya dönüştürmek istiyorsanız, bunun gibi bir şey yapabilirsiniz:

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

Bunun nedeni, ASCII'de normal olarak yazdırılamayan bazı öğeler olmasıdır.

Örneğin, 97'den 122'ye kadar olan sayılar, a'dan z'ye küçük harflere karşılık gelen tam sayılardır.


-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
Lütfen yalnızca bir kod dökümü yerine bir açıklama sağlayın.
— Jules Dupont

Yalnızca kod içeren bu gönderi soruyu yanıtlasa da, lütfen neden böyle yaptığına dair bir açıklama ekleyin. Bu, gelecekteki kullanıcıların durumlarına ilişkin yanıtı değerlendirmelerine yardımcı olacaktır.
— Tom Brunberg
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.