Replace emoji with appropriate java code

时间秒杀一切 提交于 2019-12-13 16:26:29

问题


I am working on a simple java program that can take a string like this:

⛔️🚫✋STOP✋🚫⛔️ 🚫You've violated 👿👎 the law!🚫 😖😖But now...😏😖 😈You

and replace each emoji with the appropriate java character. (I'm not sure what to call them).

Here is an example:

The automobile emoji: 🚗 would be replaced with: "\uD83D\uDE97".

This allows me to have a string such as

"I am a car: \uD83D\uDE97"

in Java source code, and let it look like this:

So the question is, how can I automatically find a certain emojji in a string (for example, find every red car emoji in a string) and replace it with its appropriate "Java character"?

EDIT ONE:

Nevermind, turned out to be really simple. I could just do

string.replace("🚗","Java code");

回答1:


You should use the following method for this purpose:

public String replaceAll(String regex, String replacement)

See documentation.

Example:

source
.replaceAll("🚗", "value")
.replaceAll("🚫", "nextValue")

A nicer way to do it is to build a map with your existing chars, and do the replacement in a for each:

Map<String, String> mappedChars = new HashMap<>();
mappedChars.put("A", "valueForA");
mappedChars.put("B", "valueForB");

AtomicReference<String> value = new AtomicReference<>("A and B and C");

mappedChars
        .entrySet()
        .stream()
        .forEach(entry -> value.getAndUpdate(current -> current.replaceAll(entry.getKey(), entry.getValue())));

//valueForA and valueForB and C



回答2:


Be aware that not all encodings can handle these strings. You could pass the string to a byte array, parse it and convert it back to a string.




回答3:


Those are unicode characters. Finding them and replacing them are actually different tasks.

Finding the unicode characters in a string is a difficult prospect. One method would be to simply apply indexOf to your string to find the beginning of a unicode character.

The following is a rather inefficient example, meant more to illustrate the point than to run optimally.

int unicodeCharacterLocation = Str.indexOf("\\u")

if (Character.isDigit(Str.charAt(unicodeCharacterLocation + 1)))
{
    if (Character.isDigit(Str.charAt(unicodeCharacterLocation + 2)))
    {
        if (Character.isDigit(Str.charAt(unicodeCharacterLocation + 3)))
        {
            if (Character.isDigit(Str.charAt(unicodeCharacterLocation + 4)))
            {
                //You may have found a unicode character
            }
        }
    }
}

This could be set in a loop to find all of the unicode characters.

Now, to display the character you found, you will want to replace the corresponding unicode value in your string with a single unicode character. To do this, you will have to interpret the code as its character. This question already has a good explanation of that process.



来源:https://stackoverflow.com/questions/36802371/replace-emoji-with-appropriate-java-code

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!