แปลง int เป็น char ใน java


125

ด้านล่างนี้คือข้อมูลโค้ด

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

แต่สิ่งที่ฉันได้รับคือผลลัพธ์ที่ว่างเปล่า

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

ฉันจะได้ 1 เป็นผลลัพธ์ของฉัน

ใครช่วยอธิบายเรื่องนี้ได้บ้าง? และถ้าฉันต้องการแปลง int เป็นอักขระในตัวอย่างแรกฉันควรทำอย่างไร?


9
" แปลงเป็น int เพื่อถ่านหรือไม่? " บางทีแต่สำหรับb = (char)('0' + a) 0 <= a <= 9
johnchen902

6
ค่าทศนิยม 01 เป็นอักขระที่ไม่มีการพิมพ์ มันทำงานได้อย่างถูกต้อง
เมษายน

คำตอบ:


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

จะพิมพ์ char ที่มีค่า ascii 1 (ถ่านเริ่มต้นซึ่งไม่สามารถพิมพ์ได้)

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

จะพิมพ์ถ่านที่มีค่า ascii 49 (ค่าหนึ่งที่ตรงกับ '1')

หากคุณต้องการแปลงหลัก (0-9) คุณสามารถเพิ่ม 48 Character.forDigit(a, 10);ถึงมันและโยนหรือสิ่งที่ต้องการ

หากคุณต้องการแปลงค่าintas in ascii คุณสามารถใช้Character.toChars(48)ตัวอย่างเช่น


2
System.out.println('b'+3);ฉันจะใช้ println b3แทนได้101อย่างไร วิธีอื่นแทน printf?
Asif Mushtaq

2
@UnKnown คุณต้องทำให้เป็นสตริงแทนถ่านดังนี้ System.out.println ("b" + 3);
Haggra

Character.toCharsดำเนินการกับจุดรหัส Unicode ไม่ใช่ค่า ASCII คุณจะได้รับสิ่งเดียวกัน (สำหรับ BMP เท่านั้น) หากคุณเพียงแค่ใช้ int เป็น char
จุดอ่อน

56

คำตอบของฉันคล้ายกับคำตอบของ jh314 แต่ฉันจะอธิบายให้ลึกกว่านั้นเล็กน้อย

สิ่งที่คุณควรทำในกรณีนี้คือ:

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

ที่นี่เราใช้ '0' เนื่องจากตัวอักษรแสดงด้วยค่า ASCII '0' คืออักขระและแสดงด้วยค่า 48

เราพิมพ์(a + '0')และเพื่อเพิ่มสิ่งเหล่านี้ Java แปลง '0' เป็นค่า ASCII ซึ่งคือ 48 และ a คือ 1 ดังนั้นผลรวมจึงเป็น 49 จากนั้นสิ่งที่เราทำคือ:

(char)(49)

เราหล่อไปint charASCII เทียบเท่ากับ 49 คือ '1' คุณสามารถแปลงตัวเลขใด ๆ เป็นถ่านด้วยวิธีนี้และเป็นวิธีที่ชาญฉลาดและดีกว่าการใช้.toString()วิธีการแล้วลบตัวเลขด้วย.charAt()วิธีการ


42

ดูเหมือนว่าคุณกำลังมองหาCharacter.forDigitวิธีการ:

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

นอกจากนี้ยังมีวิธีที่สามารถแปลงจากถ่านกลับเป็น int:

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

โปรดทราบว่าการเปลี่ยนRADIXคุณยังสามารถรองรับเลขฐานสิบหก (เลขฐาน 16) และเลขฐานใดก็ได้ถึง 36 (หรือCharacter.MAX_RADIXที่เรียกกันว่า)


@ProgrammingNub กำหนด "ค่าของ int" คุณไม่ต้องการให้พิมพ์ตัวเลข 4 หรือไม่? หรือคุณต้องการพิมพ์ค่า Ascii ของ int เพื่อให้65พิมพ์ออกมาA? เนื่องจากคำตอบของฉันที่นี่พิมพ์พฤติกรรมที่คาดหวังสำหรับข้อกำหนดของคำถามนี้ ดูideone.com/09LAFR
Simon Forsberg

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

สวัสดีฉันประสบปัญหาเดียวกัน แต่สิ่งที่ฉันทำคือรหัสต่อไปนี้

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

ด้วยสิ่งนี้คุณจะได้รับค่าทศนิยมเป็นประเภทถ่าน ฉันใช้ charAt () กับดัชนี 0 เพราะค่าเดียวใน String นั้นคือ 'a' และอย่างที่คุณทราบตำแหน่งของ 'a' ใน String นั้นเริ่มต้นที่ 0

ขออภัยหากอธิบายภาษาอังกฤษได้ไม่ดีหวังว่าจะช่วยคุณได้


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

ใน ASCII ถ่านทุกตัวจะมีหมายเลขของตัวเอง และถ่าน '0' คือ 48 สำหรับทศนิยม '1' คือ 49 และอื่น ๆ ดังนั้นถ้า

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

1

ไม่มีใครตอบ "คำถาม" ที่แท้จริงได้ที่นี่: คุณกำลังแปลง int เป็น char อย่างถูกต้อง ในตาราง ASCII ค่าทศนิยมของ 01 คือ "start of head" ซึ่งเป็นอักขระที่ไม่พิมพ์ ลองค้นหาตาราง ASCII และแปลงค่า int ระหว่าง 33 ถึง 7E ที่จะทำให้คุณดูตัวละคร


1

เมื่อใดก็ตามที่คุณพิมพ์จำนวนเต็มเพื่อ char มันจะส่งคืนค่า ascii ของ int นั้น (เมื่อไปที่ตาราง ascii เพื่อความเข้าใจที่ดีขึ้น)

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

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

    //output- D

2
Sort of .... charเป็นหน่วยรหัส UTF-16 68 เป็นหน่วย UTF-16 รหัสเป็นเพียงหน่วยรหัสที่จำเป็นในการเป็นตัวแทนของ Unicode codepoint U + 0044 System.out จะเปลี่ยนการเข้ารหัสข้อความเป็นการเข้ารหัสเริ่มต้น (น่าจะตรงกับเทอร์มินัล / คอนโซลที่โปรแกรมกำลังทำงานอยู่) println ใช้ถ่านและพยายามเข้ารหัส เนื่องจากถ่านเป็นจุดรหัสที่สมบูรณ์จึงสามารถลองได้ เนื่องจาก U + 0044 เป็นอักขระในชุดอักขระเกือบทั้งหมดจึงควรประสบความสำเร็จในการนำไปยังเทอร์มินัลโดยไม่มีการรบกวน ไม่เกี่ยวข้องกับ ASCII
Tom Blodget

0

ใน java ถ่านคือ int ตัวอย่างแรกของคุณพิมพ์อักขระที่ตรงกับค่า 1 ในโครงร่างการเข้ารหัสอักขระเริ่มต้น (ซึ่งน่าจะเป็น Unicode) อักขระ Unicode U + 0001 เป็นอักขระที่ไม่มีการพิมพ์ซึ่งเป็นสาเหตุที่คุณไม่เห็นเอาต์พุตใด ๆ

หากคุณต้องการพิมพ์อักขระ '1' คุณสามารถค้นหาค่า '1' ในรูปแบบการเข้ารหัสที่คุณใช้ ใน Unicode นี่คือ 49 (เหมือนกับ ASCII) แต่จะใช้ได้กับตัวเลข 0-9 เท่านั้น

คุณอาจจะดีกว่าการใช้ String มากกว่า char และใช้toString()วิธีการในตัวของ Java :

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

สิ่งนี้จะทำงานไม่ว่าการเข้ารหัสระบบของคุณคืออะไรและจะใช้ได้กับตัวเลขหลายหลัก


1
ขออภัย แต่ char ไม่ใช่ int เนื่องจากสร้างจากจำนวนไบต์ที่แตกต่างกัน (การแทนค่าchar-intอย่างรวดเร็ว- stackoverflow ) อักขระสามารถแสดงด้วยตัวเลขคุณพูดถูก แต่ไม่ใช่จำนวนเต็ม
morels

นอกจากนี้ฉันคิดว่าคุณอาจพบว่าบรรทัดที่สองควรอ่าน "String b = Integer.toString (a);"
ผิดพลาด

ชนิดข้อมูล char ถูกกำหนดไว้อย่างดีในjava.lang.Characterเช่นเดียวกับความสัมพันธ์กับจุดรหัส int และ unicode และหน่วยรหัส
เอียน

0

หากคุณต้องการพิมพ์อักขระ ascii ตามรหัส ascii และไม่ต้องการเกินกว่านั้น (เช่นอักขระ Unicode) คุณสามารถกำหนดตัวแปรของคุณเป็นไบต์จากนั้นใช้ (char) convert เช่น:

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

BTW รหัส ascii สำหรับตัวอักษร 'A' คือ 65


0

ตรวจสอบให้แน่ใจว่าค่าจำนวนเต็มเป็นค่า ASCII ของตัวอักษร / อักขระ

ถ้าไม่ทำแล้ว

for e.g. if int i=1

จากนั้นเพิ่ม 64 เข้าไปเพื่อให้มันกลายเป็น 65 = ค่า ASCII ของ 'A' จากนั้นใช้

char x = (char)i;

print x

// 'A' will be printed 

0

หากเรากำลังพูดถึงประเภทคลาส - ไม่ใช่แบบดั้งเดิมต้องทำเคล็ดลับต่อไปนี้:

Integer someInt;
Character someChar;

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

ไม่จำเป็นต้องทำให้เป็น String ในกระบวนการและคุณมีจำนวน paranthesis ไม่ตรงกัน
Simon Forsberg

Simon, "วงเล็บ" แนะนำว่าอย่างไร?
matua

-1

ดูโปรแกรมต่อไปนี้สำหรับแนวคิดการแปลงที่สมบูรณ์

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

หวังว่าอย่างน้อยมันจะช่วยอะไรบางอย่าง


-2

หากคุณต้องการแปลงอักขระเป็นจำนวนเต็มที่สอดคล้องกันคุณสามารถทำได้ดังนี้:

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

สิ่งนี้เกิดขึ้นเนื่องจากใน ASCII มีบางรายการที่ไม่สามารถพิมพ์ได้ตามปกติ

ตัวอย่างเช่นตัวเลข 97 ถึง 122 เป็นจำนวนเต็มที่ตรงกับตัวพิมพ์เล็ก a ถึง z


-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
โปรดให้คำอธิบายแทนการถ่ายโอนรหัส
Jules Dupont

แม้ว่าโพสต์แบบใช้รหัสเท่านั้นนี้อาจตอบคำถามได้โปรดเพิ่มคำอธิบายว่าเหตุใดจึงเป็นเช่นนั้น สิ่งนี้จะช่วยให้ผู้ใช้ในอนาคตประเมินคำตอบสำหรับสถานการณ์ของพวกเขา
Tom Brunberg
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.