#java #string #unicode #codepoint
#java #строка #unicode #кодовая точка
Вопрос:
Хорошо, итак, я чувствую, что этот вопрос задавался много раз, но я не могу найти ответ. Я сравниваю два разных файла, которые были сгенерированы двумя разными программами. Конечно, обе программы генерируют файлы из одних и тех же запросов к БД. Я сталкиваюсь со следующими различиями:
s1 =
Samsung - Mobile USB Chargers
против.
s2 =
Samsung u2013 Mobile USB Chargers
Как мне преобразовать s2 в s1 или, что еще лучше, как мне сравнить их без получения разницы? Кто-то где-то в широком Интернете упомянул об использовании класса StringUtils ApacheCommons-lang, но я не смог найти ничего полезного.
Комментарии:
1. Обратите внимание, что первая строка имеет дефис ASCII (через ДЕФИС МИНУС), в то время как вторая имеет ТИРЕ.
2. Хм, то есть вы хотите сказать, что две строки нельзя сравнить каким-либо простым способом, кроме создания какой-то таблицы поиска?
Ответ №1:
Вы могли бы сложить все символы с помощью свойства Dash_Punctuation.
Этот код будет напечатан true
:
boolean equal = "Samsung u2013 Mobile USB Chargers"
.replaceAll("\p{Pd}", "-")
.equals("Samsung - Mobile USB Chargers");
System.out.println(equal);
Обратите внимание, что это будет применяться ко всем символам с этим свойством (например, 〰 U 3030 ВОЛНИСТАЯ ЧЕРТОЧКА). Полный список символов со свойством Dash_Punctuation (Pd) находится в UnicodeData.txt. Java 6 поддерживает Unicode 4. Обсуждение пунктуации см. в главе 6.
Комментарии:
1. Очень интересно. Я думаю, что это приближает меня к моему ответу, и я продолжу исследование. Сейчас я дам вам принятый ответ и прочитаю эту ссылку в юникоде, которой вы поделились.
2. @Mohamed Nuur — Я внес некоторые исправления в свой пост; некоторые символы тире, упомянутые в главе 6 (например, ТИЛЬДА U 007E), не имеют свойства Pd.
Ответ №2:
Программа, сгенерировавшая первую строку, записывает файл в ASCII, используя резервный механизм замены символов. Второй способ заключается в записи файла в Unicode.
Их можно сравнить, создав копию второго файла в ASCII с использованием того же резервного механизма.
Лучшим решением было бы модифицировать первую программу так, чтобы она также использовала Unicode.
(Возможно, что во втором файле использовалось что-то другое, кроме Unicode, поскольку некоторые другие наборы символов включают тире en. Если это так, то лучшим решением будет записать оба файла в Unicode, если это возможно.)
Комментарии:
1. невозможно изменить какой-либо из выходных данных. Да, одна из них написана в Unicode, а другая, по-моему, в ascii. хотя я не уверен на 100%. по сути, одно из них является устаревшим приложением c , а другое — приложением Java. итак, мы заметили много изменений из-за символов / кодовых точек Unicode. каков наилучший способ игнорировать эти изменения?