3

正規表現を使用してiOS 6から絵文字を解析することに頭を悩ませようとしています。

絵文字の出現ごとにスパン可能なものに置き換えたいと思います。ここで、絵文字コードをリソース内の画像に置き換えます。これまでのところ、私はそれを機能させることができませんでした。

私がこれまでに持っているもの:

static public Spannable getSpannable(String str) {
    Spannable spannable = spannableFactory.newSpannable(str);
    char c = str.charAt(0);
    Pattern p = Pattern.compile("([\ud83d\ude01-\ud83d\ude45])");
    Matcher m = p.matcher(str);
    while (m.find()) {
        if (mSpannables.get(m.group()) == null) {
            Bitmap b = BitmapFactory.decodeResource(myApp.getAppContext().getResources(), R.drawable.u0033);
            ImageSpan imp = new ImageSpan(Bitmap.createScaledBitmap(b, 70, 70, false));
            mSpannables.put(m.group(), imp);
        }
        spannable.setSpan(mSpannables.get(m.group()), m.start(), m.end(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    }
    return spannable;
}

(これはまだ本番環境に対応していないことに気付きました。関数が呼び出されるたびにパターンを作成することはパフォーマンス キラーです。正規表現のマッチングを機能させようとしているだけです。)

現在の正規表現は少数の絵文字に一致しています。できるだけ因数分解して、完全な絵文字文字セットを取得したいと思います。

因数分解しようとすると、もううまくいきません。たとえば、これは機能しません。

"\ud83d[\udc00-\uddff]"

試してみるとさらに少ない

"[\ue000-\uf8ff]|\ud83c[\udf00-\udfff]|\ud83d[\udc00-\uddff]"

(機能している場合)これは、文字セットに存在するすべての絵文字に一致するはずです。

4

3 に答える 3

0

addEmojisたぶん、https://github.com/rockerhieu/emojicon/blob/master/library/src/main/java/com/rockerhieu/emojicon/EmojiconHandler.javaでの実装を見ることができます

于 2014-01-19T10:03:00.120 に答える