Преобразование 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 в char, как в первом фрагменте, что мне делать?

user2640480
источник
9
« Преобразовать int в char? » Возможно, b = (char)('0' + a)но только для 0 <= a <= 9.
johnchen902 01
6
Десятичное значение 01 - непечатаемый символ; он работает правильно.
apraetor

Ответы:

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

распечатает символ со значением ascii 1 (символ начала заголовка, который нельзя распечатать).

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

распечатает символ со значением ascii 49 (соответствует '1')

Если вы хотите преобразовать цифру (0-9), вы можете добавить к ней 48 и преобразовать или что-то в этом роде Character.forDigit(a, 10);.

Если вы хотите преобразовать intas в значение ascii, вы можете использовать, Character.toChars(48)например,.

jh314
источник
2
System.out.println('b'+3);как я могу b3вместо этого 101использовать println? любым другим способом вместо printf?
Асиф Муштак,
2
@UnKnown Вам нужно сделать его строкой вместо символа, как показано ниже System.out.println ("b" + 3);
Haggra
Character.toCharsработает с кодовыми точками Unicode, а не со значениями ASCII. Вы получите то же самое (только для BMP), если просто приведете int к char.
weaknespase
55

Мой ответ похож на ответ 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в char. Эквивалент 49 в кодировке ASCII равен «1». Таким образом вы можете преобразовать любую цифру в char, и это умнее и лучше, чем использование .toString()метода с последующим вычитанием цифры по .charAt()методу.

Haggra
источник
42

Похоже, вы ищете Character.forDigitметод:

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

Также существует метод, который может преобразовать из char обратно в 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
Саймон Форсберг
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);

При этом вы получаете десятичное значение как тип char. Я использовал charAt () с индексом 0, потому что единственное значение в этой строке - это 'a', и, как вы знаете, позиция 'a' в этой строке начинается с 0.

Извините, если мой английский плохо объяснил, надеюсь, это вам поможет.

3ryck
источник
3
int a = 1;
char b = (char) (a + 48);

В ASCII у каждого символа есть свой номер. И char '0' - это 48 для десятичной дроби, '1' - это 49, и так далее. Так что если

char b = '2';
int a = b = 50;
Большая свинья
источник
1

Никто не ответил на настоящий "вопрос" здесь: вы правильно конвертируете int в char; в таблице ASCII десятичное значение 01 - это «начало заголовка», непечатаемый символ. Попробуйте найти таблицу ASCII и преобразовать значение типа int между 33 и 7E; это даст вам взглянуть на персонажей.

apraetor
источник
1

Всякий раз, когда вы вводите cast integer в 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
Типа .... char- это кодовая единица UTF-16. 68 как кодовая единица UTF-16 - единственная кодовая единица, необходимая для представления кодовой точки Unicode U + 0044 . System.out изменит кодировку текста на кодировку по умолчанию (предположительно, соответствующую терминалу / консоли, в которой работает программа). println берет символ и пытается его закодировать. Поскольку char - это полный код, можно попробовать. Так как U + 0044 - это символ почти во всех наборах символов, он должен быть успешно доставлен на терминал без искажений. Ничего общего с ASCII.
Том Блоджет
0

В java char - это 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);

Это будет работать независимо от кодировки вашей системы и будет работать для многозначных чисел.

david25272
источник
1
Извините, но char не является int, потому что он состоит из другого количества байтов (быстрое представление char-int - stackoverflow ). Символ может быть представлен числом, вы правы, но это не целое число.
сморчки
Кроме того, я думаю, вы можете обнаружить, что вторая строка должна читать «String b = Integer.toString (a);»
Неисправный
Тип данных char четко определен в java.lang.Character, а также его отношение к кодовым точкам и единицам кода int и unicode.
Ян
0

если вы хотите печатать символы ascii на основе их кода ascii и не хотите выходить за рамки этого (например, символы Unicode), вы можете определить свою переменную как байт, а затем использовать преобразование (char). то есть:

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

Кстати, код 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 в процессе, и у вас будет несоответствующее количество парантезов.
Саймон Форсберг
Саймон, "скобки". Посоветуйте, как тогда?
Матуа
-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
Пожалуйста, дайте объяснение, а не просто дамп кода.
Жюль Дюпон
Хотя это сообщение, содержащее только код, может дать ответ на вопрос, пожалуйста, объясните, почему это происходит. Это поможет будущим пользователям оценить ответ для своей ситуации.
Том Брунберг