正規表現によるマッチングとリプレイス

179 views
Skip to first unread message

eijixAG

unread,
May 4, 2011, 8:07:29 AM5/4/11
to 日本Androidの会
こんにちは。

eijixAGです。
質問ばかりで申し訳ないです。

unicode文字が含まれたテキスト(utf-8)から、unicode文字(\uxxxx)のみ抜き出し、さらにその下4桁(xxxx)を取得した
いのですが、上手くいきません。

==========
Pattern p = Pattern.compile("[\uE63E-\uE757]");
Matcher m = p.matcher(content); // テキストcontentの中に含まれたunicode文字を探す
boolean b1 = m.matches();

if (b1 == true){
// マッチする文字列を含む限り繰り返す
while (m.find()) {
// 指定したグループの数だけ繰り返す
for (int j = 0; j <= m.groupCount(); j++) {
String character = m.group(j);
String unichara = String.valueOf((char)
Integer.parseInt(character.substring(2, 6), 16));
}
}
}
==========
以上のコードで試しているのですが、エラー終了してしまいます。(テキストにunicode文字1個だけの時)
それどころか、unicodeが確実に含まれているはずのテキストが「boolean b1=false」で返ってきたりします。
unicode文字が複数含まれていることもあり、その場合はその数だけ抽出したいです。
上のコードには含んでいませんが、最終的にそのunicodeごとにリプレイスも必要になりますが、その前に抽出を、と思い質問させていただきまし
た。
アドバイスをよろしくお願いします。

eijixAG

Akihiko Seino

unread,
May 4, 2011, 9:54:06 AM5/4/11
to android-g...@googlegroups.com
はじめまして。

清野ともうします。

2011年5月4日21:07 eijixAG <nish...@gmail.com>:


> こんにちは。
>
> eijixAGです。
> 質問ばかりで申し訳ないです。
>
> unicode文字が含まれたテキスト(utf-8)から、unicode文字(\uxxxx)のみ抜き出し、さらにその下4桁(xxxx)を取得した
> いのですが、上手くいきません。
>
> ==========
> Pattern p = Pattern.compile("[\uE63E-\uE757]");

このコードですが、System.out.println を使って表示を試すと何も表示されません。
存在しないコード範囲では見つからないのも道理ですがこの範囲は正しいのですか?

試したのはE63E, E640, E642, E644 の4文字です。

TAO Seiichiroh

unread,
May 4, 2011, 9:08:00 PM5/4/11
to android-g...@googlegroups.com
tao です

> unicode文字が含まれたテキスト(utf-8)から、unicode文字(\uxxxx)のみ抜き出し、さらにその下4桁(xxxx)を取得した
> いのですが、上手くいきません。

正規表現使わないでできますね。 java.lang.String#codePointAt(int index) で char を取得し、
java.lang.Character のメソッドをお好きなように使えばやりたい事ができるように思います


--
// TAO Seiichiroh <tao19...@gmail.com>

takayuki hamawaki

unread,
May 4, 2011, 10:07:35 AM5/4/11
to android-g...@googlegroups.com
はじめまして。

「boolean b1=false」となる原因ですが、
Matcherのmatches()とfind()の違いを調べればわかるかと思います。

ソースは以下のような感じでしょうか。
String content = "\uE63Cて\uE63Eす\uE63Fと\uE640";


Pattern p = Pattern.compile("[\uE63E-\uE757]");
Matcher m = p.matcher(content); // テキストcontentの中に含まれたunicode文字を探す

while (m.find()) {
String character = m.group(0);
String code = "";
for (int tmp : character.getBytes("UTF-16")) {
if (tmp < 0) tmp = tmp + 256;
String dscode = Integer.toHexString(tmp);
if (dscode.length() < 2) dscode = "0" + dscode;
code += dscode;
}
System.out.println(character + "=>" + code + "");
}

以下のHPを参考にしました。
http://bellks-tec.cocolog-nifty.com/blog/2007/04/unicodejava_d79d.html


以上です。

Reply all
Reply to author
Forward
0 new messages