Преобразование потока int в char в java

Это, вероятно, ответили иначе, но как вы можете получить значение символа значения int?

В частности, я читаю a из потока tcp, а метод чтения .read() возвращает int.

Как мне получить char из этого?

Ответ 1

Если вы пытаетесь преобразовать поток в текст, вам нужно знать, какую кодировку вы хотите использовать. Затем вы можете передать массив байтов в конструктор String и предоставить Charset или используйте InputStreamReader вместо Charset.

Простое выполнение от int до char работает только если вы хотите ISO-8859-1, если вы читаете байты из потока напрямую.

EDIT: Если вы уже используете Reader, то верное значение от read() до char - это правильный путь (после проверки его -1 или нет)... но это нормально более эффективным и удобным для вызова read(char[], int, int) для чтения целого блока текста за раз. Однако не забудьте проверить возвращаемое значение, чтобы узнать, сколько символов было прочитано.

Ответ 2

Возможно, вы просите:

Character.toChars(65) // returns ['A']

Дополнительная информация: Character.toChars(int codePoint)

Преобразует указанный символ (кодовая точка Юникода) в его представление UTF-16, хранящееся в массиве char. Если указанная кодовая точка является значением BMP (Basic Multilingual Plane или Plane 0), результирующий массив char имеет то же значение, что и codePoint. Если указанная кодовая точка является дополнительной кодовой точкой, результирующий массив char имеет соответствующую суррогатную пару.

Ответ 3

Это зависит от того, что вы подразумеваете под "преобразованием int в char".

Если вы просто хотите указать значение в int, вы можете использовать его с помощью обозначения типа Java:

int i = 97; // 97 is 'a' in ASCII
char c = (char) i; // c is now 'a'

Если вы имеете в виду преобразование целого числа 1 в символ "1", вы можете сделать это следующим образом:

if (i >= 0 && i <= 9) {
char c = Character.forDigit(i, 10);
....
}

Ответ 4

Если вы хотите просто преобразовать int 5 в char '5': (Только для целых чисел 0 - 9)

int i = 5;
char c = (char) ('0' + i); // c is now '5';

Ответ 5

Простое литье:

int a = 99;
char c = (char) a;

Есть ли причина, по которой это не работает для вас?

Ответ 6

Это решение работает для Integer length size = 1.

Integer input = 9; Character.valueOf((char) input.toString().charAt(0))

if size > 1 нам нужно использовать для цикла и итерации.

Ответ 7

Большинство ответов здесь предлагают ярлыки, которые могут привести к большим проблемам, если вы не знаете, что делаете. Если вы хотите использовать ярлыки, вы должны точно знать, что кодирует ваши данные.

UTF-16

Всякий раз, когда java говорит о символах в своей документации, он говорит о 16-битных символах.

Вы можете использовать DataInputStream, который имеет удобные методы. Для эффективности оберните его в BufferedReader.

// e.g. for sockets
DataInputStream in = new DataInputStream(new BufferedInputStream(socket.getInputStream()));
char character = readChar(); // no need to cast

Дело в том, что каждый readChar() будет фактически выполнять 2 read и объединить их в один 16-разрядный символ.

US-ASCII

US-ASCII резервирует 8 бит для кодирования 1 символа. Таблица ASCII описывает только 128 возможных символов, поэтому 1 бит всегда не используется.

Вы можете просто выполнить приведение в этом случае.

int input = stream.read();
if (input < 0) throw new EOFException();
char character = (char) input;

Расширенный ASCII

UTF-8, Latin-1, ANSI и многие другие кодировки используют все 8 бит. Первые 7-бит следуют за таблицей ASCII и идентичны кодировке US-ASCII. Однако 8-й бит предлагает разные символы во всех этих кодировках. Итак, здесь все становится интересным.

Если вы ковбой, и вы думаете, что 8-й бит не имеет значения (т.е. вам не нравятся такие персонажи, как "à, é, ç, è, ô...), тогда вы можете получить

Однако, если вы хотите сделать это профессионально, вы должны ВСЕГДА указывать кодировку всякий раз, когда вы импортируете/экспортируете текст (например, сокеты, файлы...).

Всегда используйте кодировки

Позвольте мне стать серьезным. Все вышеперечисленные варианты - дешевые трюки. Если вы хотите написать гибкое программное обеспечение, вам необходимо поддерживать настраиваемую кодировку для импорта/экспорта ваших данных. Здесь общее решение:

Прочитайте данные с помощью буфера byte[] и преобразуйте его в String с помощью параметра charset.

byte[] buffer = new byte[1024];
int nrOfBytes = stream.read(buffer);
String result = new String(buffer, nrOfBytes, charset);

Вы также можете использовать InputStreamReader, который может быть создан с помощью параметра charset.

Просто еще одно золотое правило: никогда не добавляйте байт к персонажу. Это всегда ошибка.

Ответ 8

Основываясь на моем предположении о том, что пользователь просто хотел, чтобы literaaly конвертировал int в char, например

Input: 
int i = 5; 
Output:
char c = '5'

Об этом уже было сказано выше, однако, если целочисленное значение i > 10, то нужно использовать char array.

char[] c = String.valueOf(i).toCharArray();

Ответ 9

    int i = 7;
    char number = Integer.toString(i).charAt(0);
    System.out.println(number);

Ответ 10

Это полностью зависит от кодирования входящих данных.

Ответ 11

возможно, не самый быстрый:

//for example there is an integer with the value of 5:
int i = 5;

//getting the char '5' out of it:
char c = String.format("%s",i).charAt(0); 

Ответ 12

Ответ на преобразование char в int или long - это простое литье.

Например: - если вы хотите преобразовать char '0' в длинный.

Следуйте за простым исполнением

Char ch='0';
String convertedChar= Character.toString(ch);  //Convert Char to String.
Long finalLongValue=Long.parseLong(convertedChar);

Готово!!