空白

Unicodeの半角の空白には
\x20と\u00a0の2つがある。
※\s は、[ \t\n\x0B\f\r] と等価。
Pattern に文字で書く時は \\x20 \\u00a0 となる。
なぜ\\と書くかと云うと、
文字リテラルでは\自体がUnicodedエスケープシケンスを意味し、Javaコンパイラがソースを読む時点でコード変換し、Patternには半角空白そのものが渡るので、
Patternに\u00a0という文字を読ませたいなら、\\u00a0 と、くどくどと書くことになる。
※本来は、\x20 \u00a0 でちゃんと動いていいハズだ。しかし、Windowsで文字化けするJavaMailで痛い目に遭ったことがあれば、くどくどと書く方を自然と選ぶものだ。
しかし日本語だけ全角空白と云うものがある。
区 点 JIS  SJIS EUC  UTF-8  UTF-16 字
01 01 2121 8140 A1A1 E38080 3000   ' '
JavaScriptは、いつもはUTF-16なら\\u3000 と書くと良い。
Javaの場合は、OSのライブラリィを使う都合上、どこかでコードページ変換をしている。
日本語のWindowsならシフトJISだから、\\u8140 になるのかな?
今のLinuxならUTF-8だから、\\uE38080 なのかもしれない。
※しかし\\uは2バイト文字専用のハズだ。
だが、JavaではUnicode(UTF-16)を使うことになっているので、どのOSでも\\u3000でよいはずだ。
ついでに書くけど、Patternクラスでは
\uhhhh 16 進値 0xhhhh を持つ文字
なので\uはユニコードと云う意味ではない。
しかしJavaではUnicode(UTF-16)を使うことになっているので、結果としてUTF-16のコードを入れることになる。
しかし、どの変でUTF-8やシフトJISをUTF-16 に変換しているのか、はっきりしない。
もしかすると、画面やファイルの入出力の土壇場で変換をかけているだけかもしれない。
だから、シフトJISをUTF-16に⇒エスケープ変換だったらいいけど、
エスケープ変換⇒シフトJISをUTF-16に変換 だったりすると、
Javaは実行時にUnicode(UTF-16)を使うと云っても、エスケープシーケンスにはソースのページコードで記載しなければならない。
その辺は、はっきりとした記述は無いので、実装は気分次第かもしれない。
例え、後述の方式になっていたとしても、泣き寝入りするしかない。
また、初期のJavaは 手作業でnative2ascii コマンドでシフトJISで書かれたpropertyファイルをASC化しなければいけないルールだったので、本来propertyファイルに可読性は無い。
オマケ;Javaで全角文字を表す正規表現は、
[^ -~。-゚]*
らしいが、これも、本来ならJavaScriptでもJavaでも支障なく使えるはずだ。
※例えOSがEUC-JPだろうがUTF-8だろうが…
さらに文字列前後の半角・全角スペースを外してチェックを掛ける場合は
 ^[  ]*[^ -~。-゚]*[  ]*$
とかけるそうだ。
※[  ] の部分は "["+半角スペース+全角スペース+"]"
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=4871&forum=7
真ん中の文字が何でもいいなら
^[  ]*[.+]*[  ]*$
になるのかな、
話は少し外れるけど、未だにStringBufferで文字列を組み立てようとするなら、
StringBuffer st = new StringBuffer();
st.append("xxxxxxxxxxxxxxxxxxxxxxxxxx");
・・・
st.append("xxxxxxxxxxxxxxxxxxxxxxxxxx");
っと酷い目に遭う。
もう年が年なので、エディタでダダダダダダダダダダダとCtrl+Vするのは辛いから、
エディでよく使う正規化表現では、
パターンを ^(.+)$ で 出力は st.append("¥1"); とすると、st.append(" と "); をたくさんコピペしなくて済む。
※勿論、事前に変換する行を選択しておかないと、全部そうなってしまう。
戻すときは、パターンを st.append¥("(.+)"¥);  で出力は ¥1 にすると たくさんコピペした部分がサラっと取れる。
※¥は半角の¥の意味。
勿論取り除くときは、矩形範囲指定が出来るエディタならそれでもいいかもしれない。
だが、もう年だから、exエディタかvi使った方がもっと楽だな。
10,120s/{[.]*}/st.append("$1");/
かな?
と書いてみたが・・・
さて、ドレがちゃんと動くかな?
もう年だから…(笑



コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA