1

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

s1 =Samsung - Mobile USB Chargers

对比

s2 =Samsung \u2013 Mobile USB Chargers

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

4

2 回答 2

2

您可以使用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 章。

于 2011-05-18T23:39:17.357 回答
1

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

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

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

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

于 2011-05-18T22:22:10.730 回答