2017-06-08 15 views
3

日本語のひらがなとかなの多くは、濁点と濁点があります。
例:ははなっばかぱ(゛及び゜部品に気づく)Javaでの濁点/ハンダクテンを削除する(別名テンテン、ぱ→は)

質問:どのようにJavaで、文字列からこれらを削除するには?

たとえば、はばぱハバパ1aあア亜はははハハハ1aあア亜になります。

パフォーマンスは重要です。

コンテキスト:コンテンツをレガシーシステムと照合します。

答えて

4

(ハーン)ダクテンの文字は、かな漢字と結合記号に分解することができます。java.textの場合、JavaはNormalizerクラスです。

String decomposed = Normalizer.normalize(input, Normalizer.Form.NFD); 

その後(ハン)を組み合わせ濁点マークが(少し速く私のテストで)例えばreplaceまたはreplaceAll

String noVoicingMarks = decomposed.replace("\u3099", "").replace("\u309A", ""); 

かで除去することができる

String noVoicingMarks = decomposed.replaceAll("\u3099|\u309A", ""); 
+0

べき私は多分後で文字列を "再構成"しますか?たとえば、(han)dakutensを含むStringは、他の特別なアクセントを持っていても同じままでなければなりません。ありがとう! :-) –

+0

@ NicolasRaoulおそらく、それは分解されているかどうかにかかわらず同じ*見てはなりません。必要であれば、正規化形式Cでそれらを戻すことができます。そのため、NFC – harold

+0

これはおそらく私が現在している問題です。結果のStringを定数Stringと照合しようとしていますが、まったく同じに見えますが、そのhexdumpは異なります。だから '文字列recomposed = Normalizer.normalize(noVoicingMarks、Normalizer.Form.NFC);'私は思いますか? –

関連する問題