Поместить смайлики из строки в строку, используя 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);

Это должно охватывать большинство случаев, я сомневаюсь, что есть какой-то способ точно определить, что подразумевается под аббревиатурой, а что нет.

Другие вопросы по тегам