続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でソースを書いたら数学記号として判断しているみたい。(−がコンソールでは?として表示されて謎なんですが)