Поместить смайлики из строки в строку, используя Java
Как удалить смайлики из строки Мой простой код..
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
Я в состоянии понять, как удалить несколько абб. или короткое сообщение
Вывод, как у меня имя, ты - SquintLaughtGrinisappGaspoooh!! шокирован, Big SmilGrinisappGaspoooh!! шокирован, Грин
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);
Это должно охватывать большинство случаев, я сомневаюсь, что есть какой-то способ точно определить, что подразумевается под аббревиатурой, а что нет.