java строка кодовая точка Юникод преобразование в символ - PullRequest
1 голос
/ 19 мая 2011

Хорошо, я чувствую, что этот вопрос задают много раз, но я не могу найти ответ.Я сравниваю два разных файла, которые были созданы двумя разными программами.Конечно, обе программы генерируют файлы из одних и тех же запросов базы данных.Я сталкиваюсь со следующими различиями:

s1 = Samsung - Mobile USB Chargers

против

s2 = Samsung \u2013 Mobile USB Chargers

Как мне преобразовать s2 в s1 или даже лучше, как сравнить два без разницы?Кто-то где-то в широких широких интернет-сетях упоминал, что использует класс StringUtils ApacheCommons-lang, но я не смог найти ничего полезного.

Ответы [ 2 ]

2 голосов
/ 19 мая 2011

Вы можете сложить все символы с помощью свойства Dash_Punctuation .

. Этот код напечатает true:

boolean equal = "Samsung \u2013 Mobile USB Chargers"
                    .replaceAll("\\p{Pd}", "-")
                    .equals("Samsung - Mobile USB Chargers");
System.out.println(equal);

Обратите внимание, что это будет применяться ко всемсимволы с этим свойством (например, 〰 U + 3030 WAVY DASH).Полный список символов со свойством Dash_Punctuation (Pd) находится в UnicodeData.txt .Java 6 поддерживает Unicode 4. См. раздел 6 для обсуждения пунктуации.

1 голос
/ 19 мая 2011

Программа, сгенерировавшая первую строку, записывает файл в ASCII, используя механизм восстановления замещения символов.Второй - запись файла в Unicode.

Их можно сравнить, сделав копию второго файла в ASCII с использованием того же механизма отката.

Наилучшим решением будет изменение первогозапрограммируйте его так, чтобы он также использовал Unicode.

(Возможно, второй файл использовал что-то отличное от Unicode, так как некоторые другие наборы символов включают в себя дефис. Если это так, то лучшим решением будет написатьфайлы в Юникоде, если это возможно.)

...