Как записать в java программе символ с кодом 514
Как мне найти в Java код символа или int, используя его имя в Юникоде?
Возвращает "LATIN SMALL LETTER A WITH DIAERESIS" , как мне выполнить обратную операцию (т. е. перейти от "LATIN SMALL LETTER A WITH DIAERESIS" к '\u00e4' ), используя "обычную" Java?
Изменить: чтобы остановить поток комментариев, которые я хочу или не хочу , вот что я бы сделал в Python:
Теперь вопрос: сделайте то же самое на Java.
И, кстати, я не хочу «печатать escape-последовательности Unicode» - на самом деле получить шестнадцатеричный код для char легко, но я хочу, чтобы символ имел заданное имя.
Другими словами , я хочу сделать обратное тому, что делает Character.getName(int) .
3 ответа
Для выпуска JDK 9 и более поздних версий используется статический метод Character.codePointOf(String name) - самый простой подход:
общедоступный статический int codePointOf (имя строки)
Возвращает значение кодовой точки символа Юникода, заданного заданным именем символа Юникода.
Это работает для всех символов Uniocde, а не только для тех, кто находится в базовой многоязычной плоскости. Например, запуск этого кода на Java 12 .
. производит этот вывод .
Подводя итоги преобразований:
- Для кодовой точки => имя Unicode используйте Character.getName(codepoint)
- Для кодовой точки => символьного представления используйте Character.toString(codepoint)
- Для Unicode name => code point используйте Character.codePointOf(name)
- Для представления символов Unicode name => в настоящее время не существует метода JDK. Вместо этого сделайте это косвенно, используя кодовую точку имени Unicode, как показано выше. Например: Character.toString(Character.codePointOf("LATIN SMALL LETTER A WITH DIAERESIS")); .
- Убедитесь, что используемый выпуск JDK поддерживает указанные имена Unicode. Например, символ с именем Unicode «Двойная спираль ДНК» был добавлен в Unicode 11, который поддерживается только версиями JDK> = 12. Если вы запустите с использованием более ранней версии JDK, вы получите IllegalArgumentException при вызове Character.codePointOf("DNA Double Helix") .
- Если вместо символа Юникода отображается белый квадрат, попробуйте изменить шрифт (например, Segoe UI Emoji для отображения символов Emoji).
Здесь вам может помочь библиотека ICU4J. У него есть класс UCharacter с getCharFromName и другие связанные методы, которые могут отображать различные типы строк символьных имен обратно в кодовые точки int , которые они представляют.
Однако, если вы работаете с жестко закодированными именами символов (т. Е. Строковыми литералами в кавычках в исходном коде), было бы гораздо эффективнее выполнить перевод один раз - используйте escape-символ \u в исходном коде и добавьте комментарий с полным именем, если необходимо, вместо того, чтобы нести расходы на анализ таблиц имен каждый раз во время выполнения. Если имена персонажей получены при чтении файла или подобного, то, очевидно, вам придется преобразовать во время выполнения.
Надеюсь, этот класс, опирающийся только на "простую" Java, будет кому-то полезен. В нем используется таблица поиска с отложенным заполнением, которую можно очистить в любое время с помощью вызова reset(false) для освобождения памяти (с возможностью автоматического заполнения таблицы и ее повторного использования при необходимости). Если искомые символы находятся в нижних блоках Unicode (как это обычно бывает), то время заполнения этой таблицы практически незаметно. Я добавил дополнительную возможность предварительно заполнить всю таблицу с помощью вызова reset(true) .
Вопрос:
Необходимо определить в программе символ с кодом 514.
Какой из приведенных фрагментов кода позволит решить оставленную задачу?
1) char c ='\u514';
2) char c ='222';
3) char c ='\u222';
4) char c ='514';
5) char c ='\u0222';
Комментарий:
Ну, так вот ни одного правильного ответа.
есть два способа задать символ с кодом 514;
char c=514;//без кавычек
char c='\u0202';
'\u0222'=512+32+2=546.
Что думают составители?
Пара опечаток.
В вопросе:
Каким будет результат выполнения приведенного фрагмента кода?
Дано два одинаковых ответа:
x=2
x=1
В вопросе:
Какую из строк необходимо добавить на место пропущенной в приведенном фрагменте кода, чтобы результатом его выполнения стала строка "Hello"?
Есть строка
String strs = new String[] ;
А должна быть
String[] strs = new String[] ;
И ещё везде страдает форматирование кода.
Вопрос:
Какой из перечисленных методов допускает его перекрытие(overriding) в подклассах?
1) public abstract void method m1()
2) public static void method m1()
3) public final void method m1()
4) public static final void method m1()
5) public void method m1()
Первое, модификатора method в Java нет.
Судя по всему опять опечатка и везде должно быть написано method_m1.
Второе, может я сильно заблуждаюсь, но имплементирование абстрактного метода это частный случай перекрытия(переопределения). Тогда тут два правильных ответа, а возможен выбор только одного.
Вопрос:
Необходимо определить, ссылаются ли объекты File f1 и File f2 на один и тот же файл на диске. Какой из приведённых фрагментов кода позволит решить поставленную задачу?
Надо как-то переформулировать вопрос.
Вопрос:
Необходимо определить номер текущего дня недели.
Какой из приведенных фрагментов кода позволит решить поставленную задачу?
(Выбор одного варианта)
1)int day = new Date().getDay();
2)Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
int day = calendar.get(Calendar.DAY_OF_WEEK);
3).
4).
5).
1 и 2 решают вопрос. Хотя первый вариант и объявлен deprecated. И номера дня совсем разные. Может лучше заменить вариант 1 на совсем неправильный?
Должен отметить, что тест очень хороший.
Если вы не против, я буду продолжать писать свои замечания здесь.
ВОПРОС:
Необходимо получить ClassLoader, который используется для текущего потока. Какой из приведённых фрагментов кода позволит решить поставленную задачу?
1) ClassLoader cl = Runtime.getCurrentClassLoader();
2) ClassLoader cl = Process.getClassLoader();
3) ClassLoader cl = Thread.getContextClassLoader();
4) ClassLoader cl = System.getClassLoader();
5) ClassLoader cl = System.getSecurityManaer().currentClassLoader()
КОММЕНТАРИЙ:
Правильный ответ никакой.
Хотя подразумевался ответ под номером 3. Но с ним проблема в том, что он не будет компилировать ни под каким предлогом. Да, у Thread есть метод getContextClassLoader, но это не метод класса и вызывать его так как написано нельзя. Вызывать этот метод можно только у объекта. Правильный вариант может выглядеть так:
ClassLoader cl = Thread.currentThread().getContextClassLoader();
ВОПРОС:
Даны следующие описания интерфейсов:
interface I1 void m1() throws IOException;
>
interface I2 void m1() throws SQLException;
>
Какой из перечисленных методов должен быть реализован классом, реализующим в, свою очередь интерфейсы I1 и I2 одновременно?
(Выбор одного варианта)
1)public void m1() throws SQLException, IOException;
2)Класс public void m1() throws IOException; в случае успешной реализации public void m1() throws SQLException;
3)Класс public void m1() throws SQLException; в случае успешной реализации public void m1() throws IOException;
4)Оба, public void m1() throws SQLException; и public void m1() throws IOException;
5)public void m1() throws Exception
КОММЕНТАРИЙ:
Опять нет правильного ответа.
во 2 и 3 варианте вообще непонятно, что имеется ввиду.
4 неправильный т.к. в одном классе не может быть двух методов с одинаковой сигнатурой.
5 неправилен т.к. тип возбуждаемого исключения методом m1 более общий чем указан в интерфейсах.
1 вариант неправилен т.к. интерфес I1 не возбуждает исключение SQLException, а интерфес I2 не возбуждает исключение IOException.
При поставленных условиях нельзя реализовать интерфейсы I1 и I2 одновременно т.к. возбуждаемые в их методах m1() исключения несовместимы они из разных ветвей иерархии. Имплементируемый метод m1 из интерфеса может возбуждать исключения либо того же типа, что указан в интерфейсе, либо типа наследника исключения указанного в интерфейсе.
То есть, реализовать метод m1 сразу двух интерфейсов можно только если эти методы возбуждают совместимые исключения. Или другими словами тип одного исключения должен быть потомком типа другого исключения.
И снова здравствуйте.
Опять проходил тест по Java.
В результатах сдачи написано: Потоки 3/4.
Хотелось бы узнать в каком вопросе ошибка?
Вот эти четыре вопроса, которые мне попались.
1)
Какой метод класса Thread используется для зауска нового потока выполнения?
Ответ: start();
2)
Каким будет результат риведенного фрагмента кода?
public class ThreadTest extends Thread public void run() System.out.println("In run");
yield();
System.out.println("Leaving run");
>
public static void main(String[] args) (new ThreadTest()).start();
>
>
Ответ:
In run
Leaving run
Даже если проверить в рабочей среде так и будет.
3)
Каким будет результат риведенного фрагмента кода?
public class Test extends Thread public void run() System.out.println("1");
yield();
System.out.println("2");
suspend();
System.out.println("3");
resume();
System.out.println("4");
>
public static void main(String[] args) Test t = new Test();
t.start();
>
>
Ответ: 12
suspend и resume - deprecated. А Проверка этого кода даёт указанный ответ.
4)
Какое из утверждений относительно приведенного фрагмента кода является верным?
class Test implements Runnable public static void main(String[] args) Thread t = new Thread (new Test());
t.start();
>
public void run(int limit) for (int x = 0; x Предыдущая 1 2 Следующая
Можно ли с помощью класса URL пересылать данные на сервер?
Выберите один ответ:
Да
Нет
Да, если сервер позволяет закачивание (upload) данных.
Выражение:
Выберите один ответ:
является способом высказывания программы
всегда происходит вне функции
всегда приводит к вычислению значения
Необходимо написать метод, который возвращает случайное число в диапазоне от 0 до 100 кратное 5. Из перечисленных вариантов выберите правильный.
Выберите один ответ:
public int getRandom5()
public int getRandom5()
public int getRandom5()
Какое из значений соответствует типу данных float?
Выберите один ответ:
от 1.2е-38 до 3.4е38;
от 0 до 65 535;
от -32 768 до 32 767.
от 2.2е-308 до 1.8е308;
Сколько комментариев в следующем примере кода:
int x = 0; /* text // text /*
int y=1; // text */ // text */
Выберите один ответ:
1 блочный, 0 строчных
2 блочных, 3 строчных
b.) 1 блочный, 1 строчный
1 блочный, 2 строчных
Какое значение будет выведено на консоль в существующем фрагменте кода?
String str1 = “abc”;
String str2 = “abc”;
System.out.println(str1 == str2);
Выберите один ответ:
true
false
Какой из перечисленных ниже классов имеет набольшее сходство с классом Vector? -:TreeSet.
Выберите один ответ:
ArrayList
AbstractCollection.
Hashtable
Как записать в Java-программе символ с кодом 514?
Выберите один ответ:
u0546
u0222
u222
‘514’
Как можно уничтожить объект в Java?
Выберите один ответ:
вызвать деструктор у объекта
вызвать метод finalize() у объекта
вызвать Runtime.getRuntime().gc()
присвоить null всем ссылкам на объект
этого нельзя сделать вручную
Посмотрите программный код
Выберите один ответ:
false false
true true
произойдет ошибка времени выполнения
false true
true false
Какого типа должны быть result и in?
Выберите один ответ:
ArrayList in; List result;
ArrayList in; List result;
ArrayList in; List result;
List in; List result;
41592572707500
Будет ли переменная sb после выполнения кода в строке 2 указывать на тот же самый объект?
1. StringBuffer sb = new StringBuffer(“abc”);
2. sb.append(“x”);
Выберите один ответ:
—————Да
Нет
Посмотрите программный код
В результате выполнения данного кода:
Выберите один ответ:
Все ответы неверны
Он даже не скомпилируется
Будет выведено «In Sub» и «QBANK»
Будет выведено «QBANK»
Результат зависит от реализации JVM
Посмотрите программный код
Выберите один ответ:
false false false
true true false
false true false
false true true
true true true
Что произойдет после компиляции кода и запуска программы без аргументов:
Выберите один ответ:
Код не скомпилируется
Код скомпилируется, но во время выполнения будет выброшено исключение NullPointerException
Код скомпилируется, но ничего не выведет на консоль
Код скомпилируется, а на консоль будет выведено число ‘0’
Что напечатает следующий код:
Выберите один ответ:
90
110
Ничего
112
Посмотрите программный код. Имеется два класса:
В результате выполнения класса В мы получим:Выберите один ответ:
Будет выведено «20»
Все ответы неверны
Возникнет ошибка времени выполнения
Код не скомпилируется
Будет выведено «10
Скомпилируется ли следующий код, если оба класса будут объявлены в файле Test.java?
Выберите один ответ:
Код скомпилируется
Код не скомпилируется
Посмотрите программный код
Данный код:
Выберите один ответ:
Скомпилируется и запустится без проблем
Не скомпилируется из-за строки 4
Не скомпилируется из-за строки 2
Не скомпилируется из-за строки 3
Не скомпилируется из-за строки 1
Посмотрите программный код
В результате мы получим:
Выберите один ответ:
«inside long»
Ошибку времени выполнения
«inside int…»
Ошибку компиляции
«inside INTEGER»
…
VVVmariya 5.0
Образование- 1-География, Биология,Экология; 2-Менеджмент- Государственное и муниципальное управление, 3- Нефтегазовое дело. Опыт работы преподавателем географии и биологии - 8 лет, инженером-экологом- 7 лет
A всегда находится в диапазоне от 0 до 255, но иногда пишет '?'
3 ответа
Вы действительно пытаетесь записать / прочитать байты в / из файла. Когда вы обрабатываете байтовые данные (в отличие от символьных данных), вы должны использовать классы InputStream и OutputStream , а не классы Reader и Writer .
В этом случае вы должны использовать FileInputStream / FileOutputStream и заключить его в BufferedInputStream / BufferedOutputStream , если вы выполняете побайтное чтение и запись.
Эти надоедливые "?" символы возникают из-за проблем с процессом кодирования / декодирования, который происходит, когда Java преобразует символы в кодировку текста по умолчанию для вашей платформы. Преобразование байтов в символы и обратно часто происходит с потерями . в зависимости от используемой схемы кодирования. Вы можете избежать этого, используя байтовые классы потоков.
Вам нужно определиться, что вы на самом деле делаете. Вы пытаетесь записать байты в файл или пытаетесь записать закодированный текст ? Потому что это разные концепции в Java; байтовый ввод-вывод обрабатывается подклассами InputStream и OutputStream , а символьный ввод-вывод обрабатывается подклассами Reader и Writer . Если вы действительно хотите записать байты в файл (что я догадываюсь из вашего упоминания о сжатии), используйте OutputStream, а не Writer.
Тогда есть еще одна путаница, которая очевидна из вашего упоминания «символов ASCII от 0 до 255». Нет символов ASCII выше 127. Пожалуйста, уделите 15 минут, чтобы прочитать это: «Абсолютный минимум для каждого разработчика программного обеспечения. Совершенно необходимо знать о Юникоде и наборах символов (никаких оправданий!) »(Джоэл Спольски). Обратите особое внимание на части, где он объясняет разницу между набором символов и кодировкой, потому что это важно для понимания ввода-вывода Java. (Чтобы проверить, поняли ли вы, вот что вам нужно изучить: Java Writers - это классы, которые переводят символьный вывод в байтовый вывод, применяя указанную клиентом кодировку к тексту и отправляя байты в OutputStream.)
Строки Java основаны на 16-битных символах, он пытается выполнить преобразования вокруг этого предположения, если нет четких спецификаций.
Фиксированное подмножество 7-битного кода ASCII можно распечатать, например, A = 65, 10 соответствует символу «новой строки», который переходит на одну строку на экране при обнаружении и «печати». Существует много других кодов, которые управляют символьным экраном, они невидимы и управляют представлением на экране, например, табуляцией, пробелами и т. Д. Существуют также другие управляющие символы, которые, например, служат для звонка в колокольчик.
Для общей обработки двоичных байтов таких проблем нет, они представляют собой числа, которые представляют данные. Только при попытке распечатать на экране они становятся значимыми во всех смыслах.
Или umlaut , или любой другой символ Юникода. Как я мог получить его код?
Просто конвертируйте его в int :
На самом деле существует неявное преобразование из char в int , поэтому вам не нужно указывать его явно, как я сделал выше, но я бы сделал это в этом случае, чтобы было очевидно, что вы ' повторно пытаюсь сделать.
Это даст кодовую единицу UTF-16, которая совпадает с кодовой точкой Unicode для любого символа, определенного в базовой многоязычной плоскости. (И только символы BMP могут быть представлены как значения char в Java.) Как сказано в ответе Анджея Дойла, если вам нужна кодовая точка Unicode из произвольной строки, используйте Character.codePointAt() .
Когда у вас есть кодовая единица UTF-16 или кодовые точки Unicode, оба из которых являются целыми числами, вам решать, что с ними делать. Если вам нужно строковое представление, вам нужно точно решить, какой вид представления вы хотите. (Например, если вы знаете, что значение всегда будет в BMP, вам может понадобиться фиксированное 4-значное шестнадцатеричное представление с префиксом U+ , например "U+0020" для пробела.) Это выходит за рамки этого вопрос, хотя мы не знаем, каковы требования.
Более полный, хотя и более подробный, способ сделать это - использовать Character.codePointAt. Это будет обрабатывать символы «высокого суррогата», которые не могут быть представлены одним целым числом в диапазоне, который может представлять char .
В приведенном вами примере это не является строго необходимым - если символ (Unicode) может поместиться внутри одной (Java) char (такой как локальная переменная registered ), то он должен попадать в Диапазон от \u0000 до \uffff , и вам не нужно беспокоиться о суррогатных парах. Но если вы смотрите на потенциально более высокие кодовые точки из массива String / char, тогда вызов этого метода является разумным, чтобы охватить крайние случаи.
В данном случае этот код не только немного меньше, но и будет обрабатывать обнаружение суррогатных пар за вас.
В Java char технически представляет собой «16-битное целое число», поэтому вы можете просто преобразовать его в int и получить его код. Из Oracle:
Тип данных char - это один 16-битный символ Unicode. Он имеет минимальное значение «\ u0000» (или 0) и максимальное значение «\ uffff» (или 65 535 включительно).
Таким образом, вы можете просто преобразовать его в int.
Этот ответ даст вам только строковые представления, которые обычно представлены в таблицах. Ответ Джона Скита объясняет больше.
Существует библиотека с открытым исходным кодом MgntUtils, в которой есть служебный класс StringUnicodeEncoderDecoder. Этот класс предоставляет статические методы, которые преобразуют любую строку в последовательность Unicode и наоборот. Очень просто и полезно. Чтобы преобразовать String, вам просто нужно:
Например, строка «Hello World» будет преобразована в
"\ u0048 \ u0065 \ u006c \ u006c \ u006f \ u0020 \ u0057 \ u006f \ u0072 \ u006c \ u0064"
Работает с любым языком. Вот ссылка на статью, в которой объясняются все подробности о библиотеке: MgntUtils. Найдите подзаголовок «Конвертер строк в Unicode». Библиотеку можно получить как артефакт Maven или взято из Github (включая исходный код и Javadoc)
Дорогой друг, Джон Скит сказал, что вы можете найти десятичный код символа, но это не шестнадцатеричный код символа, который следует упоминать в юникоде, поэтому вы должны представлять коды символов через HexCode, а не в Deciaml.
Поэтому лучше создать парсер, который дает char в качестве параметра и возвращает ahexCode как строку
Надеюсь, это поможет
// Вы можете получить юникод ниже
Int a = 'а'; // 'a' - это буква или символ, который вы хотите получить в юникоде
// Вы можете получить символ или букву ниже по юникоду
System.out.println ("\ 123"); // 123 - это юникод, который вы хотите передать
Читайте также: