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


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)например,.


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()методу.


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.

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


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; это даст вам взглянуть на персонажей.


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

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


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
Пожалуйста, дайте объяснение, а не просто дамп кода.
Жюль Дюпон

Хотя это сообщение, содержащее только код, может дать ответ на вопрос, пожалуйста, объясните, почему это происходит. Это поможет будущим пользователям оценить ответ для своей ситуации.
Том Брунберг
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.