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.