Convert int to char in java
Asked Answered
M

19

176

Below is a code snippet,

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

But what I get is empty output.

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

I will get 1 as my output.

Can somebody explain this? And if I want to convert an int to a char as in the first snippet, what should I do?

Matherly answered 1/8, 2013 at 3:51 Comment(2)
"Convert an int to a char?" Maybe b = (char)('0' + a) but only for 0 <= a <= 9.Morell
Decimal value 01 is a non-printing character; it's working properly.Sadoff
S
145
int a = 1;
char b = (char) a;
System.out.println(b);

will print out the char with Unicode code point 1 (start-of-heading char, which isn't printable; see this table: C0 Controls and Basic Latin, same as ASCII)

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

will print out the char with Unicode code point 49 (one corresponding to '1')

If you want to convert a digit (0-9), you can add 48 to it and cast, or something like Character.forDigit(a, 10);.

If you want to convert an int seen as a Unicode code point, you can use Character.toChars(48) for example.

State answered 1/8, 2013 at 3:52 Comment(3)
System.out.println('b'+3); how I can get b3 instead 101 with using println ? any other way instead printf?Acoustic
@UnKnown You need to make it a string instead of a char as follows System.out.println("b" + 3);Clova
Character.toChars operates on Unicode code points, not ASCII values. You get the same (for BMP only) if you just cast int to char.Blearyeyed
C
86

My answer is similar to jh314's answer but I'll explain a little deeper.

What you should do in this case is:

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

Here, we used '0' because chars are actually represented by ASCII values. '0' is a char and represented by the value of 48.

We typed (a + '0') and in order to add these up, Java converted '0' to its ASCII value which is 48 and a is 1 so the sum is 49. Then what we did is:

(char)(49)

We casted int to char. ASCII equivalent of 49 is '1'. You can convert any digit to char this way and is smarter and better way than using .toString() method and then subtracting the digit by .charAt() method.

Clova answered 4/6, 2015 at 21:5 Comment(0)
G
53

It seems like you are looking for the Character.forDigit method:

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

There is also a method that can convert from a char back to an int:

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

Note that by changing the RADIX you can also support hexadecimal (radix 16) and any radix up to 36 (or Character.MAX_RADIX as it is also known as).

Gallery answered 9/10, 2015 at 6:51 Comment(1)
@ProgrammingNub Define "the int's value". .Don't you want it to print the digit 4? Or would you like to print the Ascii-value of the int, so that 65 prints A ? Because my answer here prints the expected behaviour for the requirements of this question. See ideone.com/09LAFRGallery
M
13
int a = 1;
char b = (char) a;
System.out.println(b);

hola, well i went through the same problem but what i did was the following code.

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

With this you get the decimal value as a char type. I used charAt() with index 0 because the only value into that String is 'a' and as you know, the position of 'a' into that String start at 0.

Sorry if my english isn't well explained, hope it helps you.

Magocsi answered 21/11, 2014 at 3:46 Comment(0)
G
5

you may want it to be printed as '1' or as 'a'.

In case you want '1' as input then :

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

In case you want 'a' as input then :

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

java turns the ascii value to char :)

Goblin answered 19/2, 2021 at 18:54 Comment(0)
P
4
int a = 1;
char b = (char) (a + 48);

In ASCII, every char have their own number. And char '0' is 48 for decimal, '1' is 49, and so on. So if

char b = '2';
int a = b = 50;
Photoplay answered 2/11, 2018 at 16:59 Comment(0)
S
2

Nobody has answered the real "question" here: you ARE converting int to char correctly; in the ASCII table a decimal value of 01 is "start of heading", a non-printing character. Try looking up an ASCII table and converting an int value between 33 and 7E; that will give you characters to look at.

Sadoff answered 12/9, 2016 at 17:28 Comment(0)
B
2

Whenever you type cast integer to char it will return the ascii value of that int (once go through the ascii table for better understanding)

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

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

    //output- D
Bill answered 29/12, 2016 at 5:2 Comment(1)
Sort of.... char is a UTF-16 code unit. 68 as a UTF-16 code unit is the only code unit needed to represent the Unicode codepoint U+0044. System.out will change the encoding of text to the default encoding (presumably matching the terminal/console the program is running in). println takes a char and attempts to encode it. Since the char is a complete codepoint, it can try. Since U+0044 is a character in almost all character sets, there should be success in getting it to the terminal ungarbled. Nothing to do with ASCII.Fetlock
A
1

If we are talking about class types - not primitives, the following trick has to be done:

Integer someInt;
Character someChar;

someChar = (char)Integer.parseInt(String.valueOf(someInt));
Allowed answered 16/12, 2017 at 10:6 Comment(2)
No need to make it a String in the process, and you have mismatching number of paranthesis.Gallery
Simon, "parentheses". Advise how then?Allowed
R
1

First, convert the int (or another type) to String,

int a = 1;
String value = String.valueOf(a);

Then, convert that String to char.

char newValue = value.charAt(0);

You can avoid empty output in this way...

System.out.println(newValue);
Rodolforodolph answered 6/12, 2020 at 22:20 Comment(0)
I
0

In java a char is an int. Your first snippet prints out the character corresponding to the value of 1 in the default character encoding scheme (which is probably Unicode). The Unicode character U+0001 is a non-printing character, which is why you don't see any output.

If you want to print out the character '1', you can look up the value of '1' in the encoding scheme you are using. In Unicode this is 49 (the same as ASCII). But this will only work for digits 0-9.

You might be better off using a String rather than a char, and using Java's built-in toString() method:

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

This will work whatever your system encoding is, and will work for multi-digit numbers.

Ireneirenic answered 1/8, 2013 at 4:42 Comment(3)
Sorry but a char is not an int, because it is made of a different number of bytes (quick ref. char-int representation - stackoverflow). A char can be represented by a number, you are right, but it is not an integer.Veradi
Also, I think you may find the second line should read "String b = Integer.toString(a);"Friedrich
The char data type is well defined in java.lang.Character as well as its relationship to int and unicode code points and code units.Banebrudge
M
0

if you want to print ascii characters based on their ascii code and do not want to go beyond that (like unicode characters), you can define your variable as a byte, and then use the (char) convert. i.e.:

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

BTW, the ascii code for the letter 'A' is 65

Minerva answered 29/6, 2017 at 14:15 Comment(0)
H
0

Make sure the integer value is ASCII value of an alphabet/character.

If not then make it.

for e.g. if int i=1

then add 64 to it so that it becomes 65 = ASCII value of 'A' Then use

char x = (char)i;

print x

// 'A' will be printed 
Hargeisa answered 20/2, 2018 at 19:12 Comment(0)
B
0

There is one method by which int can be converted to char and even without using ASCII values.

Example:

int i = 2;
char ch = Integer.toString(i).charAt(0);
System.out.println(ch);

Explanation :

First the integer is converted to string and then by using String function charAt(), character is extracted from the string. As the integer only has one single digit, the index 0 is given to charAt() function.

Baiss answered 26/8, 2020 at 11:42 Comment(0)
W
0

My solution is for converting lower case alphabets (a-z) to (0-25) and vice versa.

My answer is for a specific use-case it is not generic solution my solution will help you if you want to store the frequency of character into an integer array of size 26 instead of using Hashmap<Character,Integer>

----> for converting 0 to 25 into a-z

char ch=(char)(0+'a'); // output 'a' // input 0(as integer)

char ch=(char)(25+'a'); // output 'z' // input 25(as integer)

---->for converting a to z into 0-25

int freq='a'-'a' // output 0 // input 'a'

int freq='b'-'a' // output 1 // input 'b'

int freq='c'-'a' // output 2 // input 'c'

int freq='z'-'a' // output 25 // input 'z'

Again this approach will help you to get the frequency of characters as well as characters

public class Main
{
    public static void main(String[] args) {
        String s="rajatfddfdf";
        int freq[]= new int[26];
        for(int i=0;i<s.length();i++){
            char characterAtIndex=s.charAt(i);
            freq[characterAtIndex-'a']+=1;
        }
        for(int i=0;i<26;i++){
            System.out.println((char)('a'+i)+" frequency="+freq[i]);
        }
    }
}

by using the above code we can get the frequency as well as character using integer array of size 26 . We can write if-else logic if you don't want to include the character with frequency 0.

Wacker answered 10/5, 2022 at 16:16 Comment(0)
M
0

You are doing nothing wrong through casting, however you are getting an empty output since there is no char of a code 1 to be printed. The values start from 65 for capital letters and start from 97 for small letters.

Mcginty answered 11/5, 2023 at 19:1 Comment(0)
S
-1

look at the following program for complete conversion concept

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

hope ,it will help at least something

Sphagnum answered 4/7, 2019 at 15:30 Comment(0)
O
-2

If you want to convert a character to its corresponding integer, you can do something like this:

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

This happens because in ASCII there are some items that can not be printed normally.

For example, numbers 97 to 122 are integers corresponding to the lowercase letters a to z.

Osrick answered 26/10, 2016 at 22:57 Comment(0)
I
-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);
        }
    }
}
Immersionism answered 3/2, 2018 at 15:32 Comment(2)
Please provide an explanation instead of just a code dump.Nicaea
While this code-only post might answer the question, please add an explanation of why it does so. This will help future users evaluate the answer for their situation.Flavia

© 2022 - 2024 — McMap. All rights reserved.