javaとかScalaで全角を半角に変換する方法

Scalaでテキストの類似度計算の前処理として全角を半角に変換したいんだけど、commonsとかにも無いみたい。まあ、日本人とかにしか関係ない処理だしなぁ。

正規表現でゴリゴリやっても良かったのだけど、どう考えても車輪の再発明だと思って探してみたらIBMのICUってのを使うのが良いみたい。

というわけでScalaで使ってみました。build.sbtには下記を追加。

libraryDependencies += "com.ibm.icu" % "icu4j" % "49.1"

サンプルは下記の通り.

import com.ibm.icu.text.Transliterator

val transliterator = Transliterator.getInstance("Fullwidth-Halfwidth");
assert("這いよれ! ニャル子さん 4".equals(transliterator.transliterate("這いよれ! ニャル子さん 4")))
assert("ABC".equals(transliterator.transliterate("ABC")))
assert("あ い う え お".equals(transliterator.transliterate("あ い う え お")))

カナ文字はもちろん、スペースや英数字もちゃんと変換してくれます。これで車輪の再発明は防げた><