使用java将表情符号从String转换为String

时间:2012-07-20 06:55:15

标签: java emoticons

如何从字符串中删除表情符号我的简单代码是..

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。或短信

输出就像我的nam是你是SquintLaughtGrinisappGaspoooh !! shockedintedr,Big SmilGrinisappGaspoooh !! shockedinted,Grin

1 个答案:

答案 0 :(得分: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);

它应该涵盖大多数案例,我怀疑有什么方法可以完美地识别出什么是首字母缩略词,什么不是。