0

文字列から絵文字を削除する方法私の簡単なコードは..

public static void main(String[] args) throws SQLException {
    String str="My nam is  ur -D ";
    getRefineCode(str);
}

private static void getRefineCode(String str) throws {
    List smstypeWord=getshortWord();
    for(int i=0;i<smstypeWord.size();i++) {
        String string=smstypeWord.get(i).toString();
        String stringcon[]=string.split("_");
        String emessage=stringcon[0];
        String emoticon=stringcon[1].trim();
        if(str.contains(emoticon)) {
            str=str.replace(emoticon, emessage);
            System.out.println("=================>"+str);
        }   
    }
    System.out.println("=======++==========>"+str);
}

private static List getshortWord() throws SQLException {
    String query1 = "SELECT * FROM englishSmsText";
    PreparedStatement ps = conn.prepareStatement(query1);
    ResultSet rs = ps.executeQuery();
    String f_message="";
    String s_message="";
    while(rs.next()) {
        s_message=rs.getString("message");
        f_message=rs.getString("short_text");
        shortMessage.add(s_message+"_"+f_message);
        //fullMessage.add(f_message);
    }
    return shortMessage;
}

私のデータベースはhttp://smsdictionary.co.uk/abbreviationsサイトに基づいています

複数のabbを削除する方法を理解できました。または短いメッセージ

出力は私の名前のようですあなたはSquintLaughtGrinisappGaspooohです!!shockedintedr、Big SmilGrinisappGaspoooh !! shockedinted、Grin

4

1 に答える 1

1

まず第一に、でreplaceある必要がありますreplaceAll。そうでない場合は、絵文字または略語の最初の出現のみをキャッチします。

次に、単語全体のみを照合することで、誤検知の数を減らすことができます。正規表現を受け入れるため、単語の境界(空白、句読点など)で囲まれた略語のみを置き換えるためにreplaceAll使用できます。replaceAll("\\b" + emoticon + "\\b", emessage)

ただし、使用している辞書では、引き続き。に置き換えKISSられKeep It Simple, Stupidます。に置き換え86ます"out Of" Or "over" Or "to Get Rid Of"...多分あなたは別のアプローチを探しているはずです。

編集:あなたが特殊文字を探していたのを忘れました。この正規表現のようなものを試してみてください。これにより、検索文字列内の特殊文字が抑制されます(以前の厳密すぎる\bパターンよりも寛大になります)。

replaceAll("((?<=\\W)|^)\\Q" + emoticon + "\\E((?=\\W)|$)", emessage);

ほとんどの場合をカバーするはずですが、頭字語として意図されているものとそうでないものを完全に識別する方法があるとは思えません。

于 2012-07-20T08:03:35.877 に答える