Преобразование 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.