如何从字符串中删除表情符号我的简单代码是..
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
答案 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);
它应该涵盖大多数案例,我怀疑有什么方法可以完美地识别出什么是首字母缩略词,什么不是。