続Unicodeプロパティ

.NETでのUnicodeプロパティを使った正規表現が納得のいかない結果だったのでJavaでもテストしてみました。

import java.util.regex.Pattern;
import java.util.regex.Matcher;
import java.util.regex.PatternSyntaxException;

class Program
{
    public static void main(String args)
    {
        String s = "Japan日本にほんニホン+−×÷√∫ΔΣ零壱弐参456789";
        Pattern p = new Pattern[] {
                Pattern.compile("\\p{Ll}"),
                Pattern.compile("\\p{Lu}"),
                Pattern.compile("\\p{InCJKUnifiedIdeographs}"),
                Pattern.compile("\\p{InHiragana}"),
                Pattern.compile("\\p{InKatakana}"),
                Pattern.compile("\\p{Sm}"),
                Pattern.compile("\\p{Nd}"),
        };

        for (int i = 0; i < p.length; ++i) {
                System.out.print(p[i].pattern() + ":");
                Matcher m = p[i].matcher(s);
                while (m.find()) 
                        System.out.print(m.group());
                System.out.println();
        }
    }
}

/* 結果
\p{Ll}:apan
\p{Lu}:JΔΣ
\p{InCJKUnifiedIdeographs}:日本零壱弐参
\p{InHiragana}:にほん
\p{InKatakana}:ニホン
\p{Sm}:+×÷√∫
\p{Nd}:456789*/

・・・同じ結果に。Unicodeとはこういうものなのかな。まぁ、気が向いたらUnicodeを調べてみようかなぁ。<多分向かない(^^;

(追記) ソースコードSJISで書いていますが、これがStringオブジェクトとしてUnicode化されますが、そのタイミングで−(マイナス)が別の文字にマッピングされているじゃないかなぁ。Unicodeでソースを書いたら数学記号として判断しているみたい。(−がコンソールでは?として表示されて謎なんですが)