Scala + ICU で日本語と半角英数字の間にスペースを入れる [Scala]
日本語と半角英数字の間にスペースを入れるという話題 [1]
現時点では Perl 5 以外に移植するのはちょっと難しいですね。
とのことなんですが、ICU [2] を使える環境(ICU4C へのバインディングがある言語ないし Java ライブラリを利用できる言語)であれば同じようにできるんじゃないかなあと思ったので ICU を俄か調べして Scala で作ってみた。
import com.ibm.icu.text._
import scala.io._
import java.io._
object Spacer {
val east = new UnicodeSet("[[\\p{han}][\\p{hiragana}][\\p{katakana}]]")
val west = new UnicodeSet("[[\\p{Latin}][\\p{Greek}][\\p{Cyrillic}]]")
def main(args:Array[String]) = {
Console.setOut(new PrintStream(args(1), "UTF-8"))
val s = Source.fromFile(args(0), "UTF-8")
var p = '\0'
while (s.hasNext) {
val c = s.next
if ((west.contains(p) && east.contains(c)) || (east.contains(p) && west.contains(c))) {
print(" ")
}
print(c)
p = c
}
}
}
第1引数がソースファイル名で第2引数が変換後ファイル名で、ともに UTF-8 前提。[3] のデモなんかを見るともっとちゃんとした正規表現が使えるようでもある(未調査)。
[1] http://blog.livedoor.jp/dankogai/archives/50740024.html
[2] http://icu.sourceforge.net/
[3] http://demo.icu-project.org/icu-bin/redemo
コメント 0