Convert int to char in java - java

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?

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.

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.

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).

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.

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 :)

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;

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.

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

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

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

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.

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

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

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.

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.

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

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.

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

Related

The conversion of int to char is not printing anything [duplicate]

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?
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.
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.
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).
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.
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 :)
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;
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.
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
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));
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);
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.
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
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
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.
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.
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
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.
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);
}
}
}

How do I check whether a char is == to a number and why doesn't this work? [duplicate]

char c = '0';
int i = 0;
System.out.println(c == i);
Why does this always returns false?
Although this question is very unclear, I am pretty sure the poster wants to know why this prints false:
char c = '0';
int i = 0;
System.out.println(c == i);
The answer is because every printable character is assigned a unique code number, and that's the value that a char has when treated as an int. The code number for the character 0 is decimal 48, and obviously 48 is not equal to 0.
Why aren't the character codes for the digits equal to the digits themselves? Mostly because the first few codes, especially 0, are too special to be used for such a mundane purpose.
The char c = '0' has the ascii code 48. This number is compared to s, not '0'. If you want to compare c with s you can either do:
if(c == s) // compare ascii code of c with s
This will be true if c = '0' and s = 48.
or
if(c == s + '0') // compare the digit represented by c
// with the digit represented by s
This will be true if c = '0' and s = 0.
The char and int value can not we directly compare we need to apply casting. So need to casting char to string and after string will pars into integer
char c='0';
int i=0;
Answer is like
String c = String.valueOf(c);
System.out.println(Integer.parseInt(c) == i)
It will return true;
Hope it will help you
Thanks
You're saying that s is an Integer and c (from what I see) is a Char.. so there you, that's the problem: Integer vs. Char comparation.

Output for Converting a number in decimal into its Complement

Output for converting a number in decimal into its 1s complement and then again converting the number into decimal does not come as expected.
MyApproach
I first converted the number from decimal to binary. Replaced all Os with 1 and vice versa and then converted the number into decimal.
Can anyone guide me? What I am doing wrong?
Code:
public static int complimentDecimal(int num) {
int p = 0;
String s1 = "";
// Convert Decimal to Binary
while (num > 0) {
p = num % 2;
s1 = p + s1;
num = num / 2;
}
System.out.println(s1);
// Replace the 0s with 1s and 1s with 0s
for (int j = 0; j < s1.length(); j++) {
if (s1.charAt(j) == 0) {
s1.replace(s1.charAt(j), '1');
} else {
s1.replace(s1.charAt(j), '0');
}
}
System.out.println(s1);
int decimal = 0;
int k = 0;
for (int m = s1.length() - 1; m >= 0; m--) {
decimal += (s1.charAt(m) * Math.pow(2, k));
k++;
}
return decimal;
}
First of all you need to define the amount of Bits your binary representation should have or an complement representation does not make sense.
If you convert 100 the binary is 1100100
complement is 0011011 which is 27
now convert 27. Binary is 11011, complement 00100 which is 4.
Now define yourself a Bit length of 8.
100 is 01100100, complement 10011011, is 155
155 is 10011011, complement 01100100, is 100
Works because every binary representation has a length of 8 bits. This is absolutly necessary for the whole complement thing to make any sense.
Consider that you now have a limit for numbers that are convertable.
11111111 which is 255.
Now that we talked about that I will correct your code
static int MAX_BITS = 8;
static int MAX_INT = (int)Math.pow(2, MAX_BITS) - 1;
public static int complimentDecimal(int num)
{
// check if number is to high for the bitmask
if(num > MAX_INT){
System.out.println("Number=" + num + " to high for MAX_BITS="+MAX_BITS);
return -1;
}
// Your conversion works!
int p=0;
String s1="";
//Convert Decimal to Binary
while(num>0)
{
p=num%2;
s1=p+s1;
num=num/2;
}
// fill starting zeros to match MAX_BITS length
while(s1.length() < MAX_BITS)
s1 = "0" + s1;
System.out.println(s1);
//Replace the 0s with 1s and 1s with 0s
// your approach on that is very wrong
StringBuilder sb = new StringBuilder();
for(int j=0;j<s1.length();j++){
if(s1.charAt(j)=='0') sb.append("1");
else if(s1.charAt(j)=='1') sb.append("0");
}
s1 = sb.toString();
/*
for(int j=0;j<s1.length();j++)
{
if(s1.charAt(j)==0)
{
s1.replace(s1.charAt(j),'1');
}
else
{
s1.replace(s1.charAt(j),'0');
}
}
*/
System.out.println(s1);
int decimal=0;
int k=0;
for(int m=s1.length()-1;m>=0;m--)
{
// you don't want the char code here but the int value of the char code
//decimal += (s1.charAt(m) * Math.pow(2, k));
decimal+=(Character.getNumericValue(s1.charAt(m))*Math.pow(2, k));
k++;
}
return decimal;
}
Additional Note: Don't get bigger then MAX_BITS = 31 or you need to work with long instead of int in your method.
First of all you have to assign the replaced String to the already defined variable that is,
s1.replace(s1.charAt(j),'1');
it should be
s1 = s1.replace(s1.charAt(j),'1');
and the next case is, when you are changing in that order it would change all the characters similar to matched case
refer Replace a character at a specific index in a string?
String.Replace(oldChar, newChar) method returns a new string resulting from replacing all occurrences of oldChar in given string with newChar. It does not perform change on the given string.
The problem (OK, one of the problems) is here:
if(s1.charAt(j)==0)
Characters in Java are actually integers, in the range 0 to 65535. Each of those numbers actually means the character corresponding to that number in the Unicode chart. The character '0' has the value 48, not 0. So when you've created a string of '0' and '1' characters, the characters will have the integer values 48 and 49. Naturally, when you compare this to the integer 0, you'll get false no matter what.
Try
if(s1.charAt(j)=='0')
(Note: OK, the other answer is right--replace does not work. Not only are you using it incorrectly, by not assigning the result, it's not the right method anyway, because s1.replace(s1.charAt(j),'1') replaces all '0' with '1' characters; it doesn't replace character j. If you specifically want to replace the j'th character in a String with something else, you'll need to use substring() and build a new string, not replace().)
A couple other things to note: (1) Integers are not "decimal" or "binary". When your method gets the num parameter, this is just a number, not a decimal number or a binary number. It's represented in your computer as a binary number (unless you're using something like a Burroughs 3500, but I think all of those died before Java was invented). But it really isn't considered decimal, binary, octal, hex, ternary, or whatever, until you do something that converts it to a String. (2) I know you said not to post alternative approaches, but you could replace the entire method with just one line: return ~num;. That complements all the bits. If you were thinking that you couldn't do this because num was a decimal number, see #1. (3) "Compliment" means to say something nice about somebody. If you're talking about flipping all the bits, the correct spelling is "complement".

Converting int to char in same integer format [duplicate]

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?
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.
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.
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).
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.
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 :)
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;
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.
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
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));
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);
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.
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
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
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.
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.
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
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.
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);
}
}
}

Integer and Unicode values for characters?

Here is some code:
private static final char low = 'a';
private static final char high = 'z';
private static final int arrayLength = high - low + 1;
I think arrayLength will be equal to 26, but I'm not sure. Is this correct? My second question is that what is the numerical value difference between 'a' and 'A'? When I used the getNumericValue() method in the Character class to test both characters:
String element = "a";
int x = Character.getNumericValue(element.charAt(0));
I tested both 'a' and 'A' and I got 10 both times. So, in general, I'm confused about the numerical values of chars. Please advise.
Character.getNumericValue() is for getting the value of numeric digits or symbols - so, for example, Character.getNumericValue('7') would return 7. As a is a digit in hexadecimal, this method returns the hexadecimal value of a, or 10.
For the Unicode value of a, do (int) 'a' or (int) "a".charAt(0). **
(** This doesn't work for Unicode characters in astral planes, but these are rare.)
You did not bother to read the javaDoc for getNumericalValue(), so I'll add the link, and tell you that the numerical value for both A and a are supposed to be 10.
You could also you test it m8
public class Main {
private static final char low = 'a';
private static final char high = 'z';
private static final int arrayLength = high - low + 1;
public static void main(String [ ] args) {
System.out.println("a: "+Character.getNumericValue(low));
System.out.println("z: "+Character.getNumericValue(high));
System.out.println("The arrayLenght is: "+arrayLength);
}
}
Console output:
a: 10
z: 35
The arrayLenght is: 26
Character.getNumericValue(char);
work like this
char 0 to 9 return int 0 to 9
char a (or) A to z (or) Z return 10 to 35.
that mean Alphanumeric.
and unicode also include.
other char value return -1.

Categories