2010-01-24 3 views
23

Существует ли стандартный способ преобразования строки типа «\ uFFFF» в символ, означающий, что строка из шести символов содержит представление одного символа Юникода?Java: преобразовать строку « uFFFF» в char

+0

больше информации, пожалуйста, – jjj

+0

вы имеете в виду нравится :: System.out.println («Введите символ:»); Строка s = read.readLine(); char c = s.charAt (0); – jjj

+1

На самом деле редактирование jleedev ошибочно: Дима сказал, что в его строке было 6 символов, а не семь. Внутренне, даже в Java, «строка» не содержит двух обратных косых черт. Я прочитал исходную версию как «\ uFFFF», «общую» строку, без экранирования, потому что плакат использовал строчное «строковое» слово, а не «String», и потому, что он точно заявил, что строка состоит из 6 символов. Итак, технически, я уверен, что строка, которую он хочет конвертировать, это «\ uFFFF» и * not * "\\ uFFFF". Тот факт, что в исходном коде Java вам нужно ввести «\ uFFFF» как «\\ uFFFF», для меня не имеет отношения к вопросу. – SyntaxT3rr0r

ответ

29
char c = "\uFFFF".toCharArray()[0]; 

Значение непосредственно интерпретируется как искомая строка, и вся последовательность реализуется как один символ.

Другой способ, если вы собираетесь жестко закодировать значение:

char c = '\uFFFF'; 

\uFFFF Обратите внимание, что, кажется, не быть собственно юникода характер, но попробовать с \u041f, например.

Read about unicode escapes here

+0

Я думаю, он имел в виду строковый литерал, который имеет 6 символов, с двумя обратными косыми чертами в исходном коде, например «\\ uFFFF». – Yoni

+0

Да, _after_ форматирование вопроса должным образом оказывается таким .. – Bozho

+0

что не так, скажем, 'char c = '\ uFFFF';'? – rsp

18

обратной косой спасшемся здесь (так что вы видите два из них, но в сек Строка действительно длиной всего 6 символов). Если вы уверен, что у вас есть именно «\ и» в начале вашей строки, просто пропустите их и конвертер шестнадцатеричное значение:

String s = "\\u20ac"; 

char c = (char) Integer.parseInt(s.substring(2), 16); 

После этого гр должен содержать символ евро, как ожидается, ,

+0

Это то, что я когда мне это нужно. – PSpeed

+0

char c = (char) Integer.parseInt (s.substring (2), 16); - Очень похоже на то, что я имел в виду. \ uFFFF - это формат представления Юникода в том месте, где я его читал (скажем, файл ASCII), а не буквальный. Я догадался, что может быть более прямой метод, но это тоже должно быть хорошо. Спасибо всем. – Dima

6
String charInUnicode = "\\u0041"; // ascii code 65, the letter 'A' 
Integer code = Integer.parseInt(charInUnicode.substring(2), 16); // the integer 65 in base 10 
char ch = Character.toChars(code)[0]; // the letter 'A' 
+0

Почему вы используете toChars(), когда вы жестко закодируете '[0]' в любом случае? Ваш код идет на полпути к поддержке высококодовых кодов, но пропускает другую половину. В чем смысл? –

+0

Почему бы не написать jsut-cast целое число непосредственно в 'char'? Он уже находится в допустимом диапазоне: 'char ch = (char) code;' –

18

Если вы разбор входных данных с Java в стиле экранированных символов вы можете захотеть взглянуть на StringEscapeUtils.unescapeJava. Он обрабатывает Unicode ускользает, а также перевод строки, закладки и т.д.

String s = StringEscapeUtils.unescapeJava("\\u20ac\\n"); // s contains the euro symbol followed by newline 
+0

Это решение сработало для меня, библиотеки Apache действительно очень полезны. Благодаря!!! – will824

Смежные вопросы