好的,所以我觉得这个问题多次问过,但我找不到答案。我正在比较两个不同程序生成的两个不同文件。当然,这两个程序都是从相同的数据库查询生成文件。我遇到了以下不同之处:
s1 =
Samsung - Mobile USB Chargers
VS
s2 =
Samsung \u2013 Mobile USB Chargers
如何将s2转换为s1甚至更好,如何比较两者而不会产生差异?在广泛的互联网上的某个地方提到使用ApacheCommons-lang的StringUtils类,但我找不到任何有用的东西。
答案 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写两个文件,如果可能的话。)