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

输出就像 My nam is You are SquintLaughtGrinisappGaspoooh!!shockedintedr, Big SmilGrinisappGaspoooh!!shockedinted, Grin

4

1 回答 1

1

首先,replace应该是replaceAll,否则你只会捕捉到第一次出现的表情符号或缩写。

其次,您可以通过仅匹配整个单词来减少误报的数量。replaceAll接受正则表达式,因此您可以replaceAll("\\b" + emoticon + "\\b", emessage)仅用于替换被单词边界(空格、标点符号等)包围的缩写。

但是,使用您正在使用的字典,您仍将替换KISSKeep 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 回答