1

わかりました、この質問は何度も聞かれているように感じますが、答えを見つけることができません。2 つの異なるプログラムによって生成された 2 つの異なるファイルを比較しています。もちろん、両方のプログラムが同じ db クエリからファイルを生成しています。私は次の違いに直面しています:

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 で書き込んでいます。2 つ目は、ファイルを Unicode で書き込むことです。

これらは、同じフォールバック メカニズムを使用して ASCII で 2 番目のファイルのコピーを作成することによって比較できます。

最善の解決策は、Unicode も使用するように最初のプログラムを変更することです。

(他の文字セットには en ダッシュが含まれているため、2 番目のファイルが Unicode 以外のものを使用していた可能性があります。その場合、最善の解決策は、可能であれば両方のファイルを Unicode で記述することです。)

于 2011-05-18T22:22:10.730 に答える