Java Char addition makes no sense (to me) - java

So I have this code here:
char a = '1';
char b = '2';
System.out.println(a+b); \\ Outputs 99
I want to know why, since this code:
char a = '1' + '2';
System.out.println(a); \\ Outputs c
I want to enhance my primitive mind, please help a kindred spirit.

characters hold an value in real;
when you write
char a = 49;
char k = '1'; // both of them holds same character because '1' code in ascii 49
and when you treat two variable in arithmetic operation and if one of them type is(byte, short, or char) these types promote in int so
System.out.println(a+b); // both of them promote int
char c = a + b; // assign c, 99 which represents 'c'

They are being added as their decimal numeric ASCII value.
The portion of the code that does a+b implicitly is adding them as integers. So, if you run the following code:
class Example {
public static void main(String[] args) {
char ch = '1';
char ch2 = '2';
int num = ch;
int num2 = ch2;
System.out.println("ASCII value of char " + ch + " is: " + num);
System.out.println("ASCII value of char " + ch2 + " is: " + num2);
}
}
You will see that the output of each char is
ASCII value of char 1 is: 49
ASCII value of char 2 is: 50
So when you do this System.out.println(a+b); they get added as their integer value which turns out to be 99

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

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

How to get sum of char values produced in a loop?

Sorry if the title is misleading or is confusing, but here is my dilemma.
I am inputting a string, and want to assign a value to each capitalized letter in the alphabet (A=1, .. Z=26) and then add the values of each letter in that string.
Example: ABCD = 10 (since 1 + 2 + 3 + 4)
But I don't know how to add all the values in the string
NOTE: This is only for capitalized letters and strings
public class Test {
public static void main(String[] args) {
Scanner scannerTest = new Scanner(System.in);
System.out.println("Enter a name here: ");
String str = scannerTest.nextLine();
char[] ch = str.toCharArray();
int temp_integer = 64;
for (char c : ch) {
int temp = (int) c;
if (temp <= 90 & temp >= 65){
int sum = (temp - temp_integer);
System.out.println(sum);
}
}
}
}
So, as you can see I print out the sum for each time its looped,
meaning: if I input "AB", the output will be 1 and 2.
However, I want to go a step further, and add these two values together, but I'm stumped, any suggestions or help? (NOTE: this is not a assignment or anything, just practising problem sets)
I would prefer to use the character literals. You know that the range is A to Z (1 to 26), so you can subtract 'A' from each char (but you need to add 1 because it doesn't start at 0). I would also call toUpperCase on the input line. Something like,
Scanner scannerTest = new Scanner(System.in);
System.out.println("Enter a name here: ");
String str = scannerTest.nextLine().toUpperCase();
int sum = 0;
for (char ch : str.toCharArray()) {
if (ch >= 'A' && ch <= 'Z') {
sum += 1 + ch - 'A';
}
}
System.out.printf("The sum of %s is %d%n", str, sum);
Which I tested with your example
Enter a name here:
ABCD
The sum of ABCD is 10
Using 64 to represent the character before 'A' in the ascii table is difficult to understand, you can perform substration between characters in Java directly.
So if 'A' represent 1, then just do c - 'A' + 1 will give you the corresponding integer value for each capitalized letter.
To get the sum, just sum up: initialize the sum as 0, and in the for loop, add increment sum by the value you calculated. You can use the incremental assignment operation: +=
Scanner scannerTest = new Scanner(System.in);
System.out.println("Enter a name here: ");
String str = scannerTest.nextLine();
char[] ch = str.toCharArray();
int sum = 0;
for (char c : ch) {
sum += c - 'A' + 1;
}
System.out.println(sum);
Change only your for to these:
int sum = 0;
for(int i = 0; i < ch.length; i++){
sum += (int) ch[i] - 96;
System.out.println(sum);
}
The sum += (int) ch[i] - 96; is because the char a is the value 97, as your say, you want char a corresponde to 1, note that a is different than A
Check the char value here: https://www.cs.cmu.edu/~pattis/15-1XX/common/handouts/ascii.html
This was tested and worked fine! Good Luck
It would look something like this (in C programming language) which you can easily modify for other programming languages:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
int i;
char word[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
unsigned int sum = 0;
unsigned int charVal;
for (i=0; i < strlen(word); ++i) {
charVal = word[i] - 'A' + 1;
printf("Value of %c is %d\n", word[i], charVal);
sum += charVal;
}
printf("Sum of %s = %d\n", word, sum);
return(0);
}
The trick is to take the character value, subtract the baseline 'A' value and add 1 to arrive at your calculation range:
charVal = word[i] - 'A' + 1;
Achieve the same in a concise way by employing Java 8's lambda functions
String str = "ABCD";
int sum = str.chars()
.filter(c -> c >= 'A' && c <= 'Z')
.map(c -> 1 + c - 'A')
.reduce(0, Integer::sum);

Convert int to char in 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);
}
}
}

How to convert ASCII code (0-255) to its corresponding character?

How can I convert, in Java, the ASCII code (which is an integer from [0, 255] range) to its corresponding ASCII character?
For example:
65 -> "A"
102 -> "f"
Character.toString ((char) i);
System.out.println((char)65);
would print "A"
String.valueOf(Character.toChars(int))
Assuming the integer is, as you say, between 0 and 255, you'll get an array with a single character back from Character.toChars, which will become a single-character string when passed to String.valueOf.
Using Character.toChars is preferable to methods involving a cast from int to char (i.e. (char) i) for a number of reasons, including that Character.toChars will throw an IllegalArgumentException if you fail to properly validate the integer while the cast will swallow the error (per the narrowing primitive conversions specification), potentially giving an output other than what you intended.
int number = 65;
char c = (char)number;
it is a simple solution
new String(new char[] { 65 })
You will end up with a string of length one, whose single character has the (ASCII) code 65. In Java chars are numeric data types.
An easier way of doing the same:
Type cast integer to character, let int n be the integer,
then:
Char c=(char)n;
System.out.print(c)//char c will store the converted value.
One can iterate from a to z like this
int asciiForLowerA = 97;
int asciiForLowerZ = 122;
for(int asciiCode = asciiForLowerA; asciiCode <= asciiForLowerZ; asciiCode++){
search(sCurrentLine, searchKey + Character.toString ((char) asciiCode));
}
for (int i = 0; i < 256; i++) {
System.out.println(i + " -> " + (char) i);
}
char lowercase = 'f';
int offset = (int) 'a' - (int) 'A';
char uppercase = (char) ((int) lowercase - offset);
System.out.println("The uppercase letter is " + uppercase);
String numberString = JOptionPane.showInputDialog(null,
"Enter an ASCII code:",
"ASCII conversion", JOptionPane.QUESTION_MESSAGE);
int code = (int) numberString.charAt(0);
System.out.println("The character for ASCII code "
+ code + " is " + (char) code);
This is an example, which shows that by converting an int to char, one can determine the corresponding character to an ASCII code.
public class sample6
{
public static void main(String... asf)
{
for(int i =0; i<256; i++)
{
System.out.println( i + ". " + (char)i);
}
}
}
upper answer only near solving the Problem. heres your answer:
Integer.decode(Character.toString(char c));

Categories