java字符串unicode代码点转换为字符

时间:2011-05-18 22:11:30

标签: java string unicode codepoint

好的,所以我觉得这个问题多次问过,但我找不到答案。我正在比较两个不同程序生成的两个不同文件。当然,这两个程序都是从相同的数据库查询生成文件。我遇到了以下不同之处:

  

s1 = Samsung - Mobile USB Chargers

     

VS

     

s2 = Samsung \u2013 Mobile USB Chargers

如何将s2转换为s1甚至更好,如何比较两者而不会产生差异?在广泛的互联网上的某个地方提到使用ApacheCommons-lang的StringUtils类,但我找不到任何有用的东西。

2 个答案:

答案 0 :(得分:2)

您可以使用Dash_Punctuation property折叠所有字符。

此代码将打印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.有关标点符号的讨论,请参阅chapter 6

答案 1 :(得分:1)

生成第一个字符串的程序是使用字符替换回退机制以ASCII编写文件。第二种是用Unicode编写文件。

可以通过使用相同的回退机制在ASCII中复制第二个文件来比较这些。

最好的解决方案是修改第一个程序,使其也使用Unicode。

(第二个文件可能使用的不是Unicode,因为其他一些字符集包括en dash。如果是这样,那么最好的解决方案是用Unicode写两个文件,如果可能的话。)