タイプ「\uXXXX」の正規表現の出現箇所をすべて置き換えたいと考えています。ここで、「XXXX」は Unicode 文字を表す 16 進数で、対応する文字に置き換えます。
次のScalaコードを試しました:
def unscape(s : String) : String = {
val rex = """\\u([0-9a-zA-Z][0-9a-zA-Z][0-9a-zA-Z][0-9a-zA-Z])""".r
rex.replaceAllIn(s,m => {
hex2str(m.group(1))
}
}
def hex2str(s:String): String = {
Integer.parseInt(s,16).toChar.toString
}
たとえば、試してみると:
unscape("Hi\\u0024, \\u0024")
次の例外が発生します。
java.lang.StringIndexOutOfBoundsException: String index out of range: 1
この他の質問では、Java の Unicode 文字の扱いにバグがあるようです。それが問題ですか?