im.delight.java.emoji.Emoji.java Source code

Java tutorial

Introduction

Here is the source code for im.delight.java.emoji.Emoji.java

Source

package im.delight.java.emoji;

/**
 * Copyright 2014 www.delight.im <info@delight.im>
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

import org.apache.commons.lang3.StringUtils;

import java.util.Map;
import java.util.regex.Pattern;
import java.util.HashMap;

/**
 * Lets you replace all emoticons in a text with their corresponding Unicode Emoji
 * <p>
 * Usage: String myEmojiString = Emoji.replaceInText(myString);
 */
public class Emoji {

    /** Characters that may not occur immediately before or after an emoticon */
    private static final String REGEX_SURROUNDING_CHARS_DISALLOWED = "[-_a-zA-Z0-9)(;:*<>=/]";
    /** A negative look-behind ensuring that the match is not preceded by one of the characters above */
    private static final String REGEX_NEGATIVE_LOOKBEHIND = "(?<!" + REGEX_SURROUNDING_CHARS_DISALLOWED + ")";
    /** A negative look-ahead ensuring that the match is not followed by one of the characters above */
    private static final String REGEX_NEGATIVE_LOOKAHEAD = "(?!" + REGEX_SURROUNDING_CHARS_DISALLOWED + ")";

    private static class ReplacementsMap extends HashMap<String, Integer> {

        private static final long serialVersionUID = 4948071414363715959L;
        private static ReplacementsMap mInstance;

        private ReplacementsMap() {
            super();
            //            put(":-)", 0x1F60A);
            //            put(":)", 0x1F60A);
            //            put(":-(", 0x1F61E);
            //            put(":(", 0x1F61E);
            //            put(":-D", 0x1F603);
            //            put(":D", 0x1F603);
            //            put(";-)", 0x1F609);
            //            put(";)", 0x1F609);
            //            put(":-P", 0x1F61C);
            //            put(":P", 0x1F61C);
            //            put(":-p", 0x1F61C);
            //            put(":p", 0x1F61C);
            //            put(":-*", 0x1F618);
            //            put(":*", 0x1F618);
            //            put("<3", 0x2764);
            //            put(":3", 0x2764);
            //            put(">:[", 0x1F621);
            //            put(":'|", 0x1F625);
            //            put(":-[", 0x1F629);
            //            put(":'(", 0x1F62D);
            //            put("=O", 0x1F631);
            //            put("xD", 0x1F601);
            //            put(":')", 0x1F602);
            //            put(":-/", 0x1F612);
            //            put(":/", 0x1F612);
            //            put(":-|", 0x1F614);
            //            put(":|", 0x1F614);
            //            put("*_*", 0x1F60D);

            put("[]", 0x1F629);
            put("[]", 0x1F632);
            put("[?]", 0x1F61E);
            put("[]", 0x1F635);
            put("[]", 0x1F630);
            put("[?]", 0x1F612);
            put("[]", 0x1F60D);
            put("[]", 0x1F624);
            put("[]", 0x1F61C);
            put("[]", 0x1F61D);
            put("[]", 0x1F60B);
            put("[?]", 0x1F618);
            put("[?]", 0x1F61A);
            put("[?]", 0x1F637);
            put("[]", 0x1F633);
            put("[]", 0x1F603);
            put("[]", 0x1F605);
            put("[]", 0x1F606);
            put("[?]", 0x1F601);
            put("[]", 0x1F602);
            put("[]", 0x1F60A);
            put("[]", 0x1263A);

            put("[]", 0x1F604);
            put("[?]", 0x1F622);
            put("[]", 0x1F62D);
            put("[]", 0x1F628);
            put("[?]", 0x1F623);
            put("[]", 0x1F621);
            put("[?]", 0x1F60C);
            put("[]", 0x1F616);
            put("[?]", 0x1F614);
            put("[??]", 0x1F631);
            put("[]", 0x1F62A);
            put("[]", 0x1F60F);
            put("[]", 0x1F613);
            put("[]", 0x1F625);
            put("[]", 0x1F62B);
            put("[]", 0x1F609);

            put("[]", 0x2600);
            put("[]", 0x2601);
            put("[]", 0x2614);
            put("[]", 0x26C4);
            put("[]", 0x26A1);
            put("[]", 0x1F300);
            put("[]", 0x1F301);
            put("[]", 0x1F302);
            put("[?]", 0x1F303);
            put("[?]", 0x1F304);
            put("[]", 0x1F305);
            put("[?]", 0x1F306);
            put("[]", 0x1F307);
            put("[]", 0x1F308);
            put("[]", 0x2744);
            put("[]", 0x26C5);
            put("[]", 0x1F309);
            put("[]", 0x1F30A);
            put("[?]", 0x1F30B);
            put("[]", 0x1F30C);
            put("[?]", 0x1F30F);
            put("[?]", 0x1F311);
            put("[]", 0x1F314);
            put("[?]", 0x1F313);
            put("[]", 0x1F319);
            put("[]", 0x1F315);
            put("[]", 0x1F31B);
            put("[]", 0x1F31F);
            put("[?]", 0x1F320);
            put("[]", 0x1F550);
            put("[]", 0x1F551);
            put("[]", 0x1F552);
            put("[]", 0x1F553);
            put("[]", 0x1F554);
            put("[]", 0x1F555);
            put("[]", 0x1F556);
            put("[]", 0x1F557);
            put("[?]", 0x1F558);
            put("[??]", 0x1F559);
            put("[??]", 0x1F55A);
            put("[??]", 0x1F55B);
            put("[]", 0x231A);
            put("[?]", 0x231B);
            put("[]", 0x23F0);
            put("[?]", 0x23F3);

            put("[]", 0xE646);
            put("[]", 0x2649);
            put("[??]", 0x264A);
            put("[]", 0x264B);
            put("[?]", 0x264C);
            put("[]", 0x264D);
            put("[]", 0x264E);
            put("[?]", 0x264F);
            put("[]", 0x2650);
            put("[]", 0x2651);
            put("[]", 0x2652);
            put("[?]", 0x2653);
            put("[]", 0x26CE);

            put("[??]", 0xE741);
            put("[?]", 0x1F337);
            put("[]", 0x1F331);
            put("[?]", 0x1F341);
            put("[]", 0x1F338);
            put("[]", 0x1F339);
            put("[??]", 0x1F342);
            put("[?]", 0x1F343);
            put("[]", 0x1F33A);
            put("[?]", 0x1F33B);
            put("[?]", 0x1F334);
            put("[]", 0x1F335);
            put("[]", 0x1F33E);
            put("[]", 0x1F33D);
            put("[?]", 0x1F344);
            put("[?]", 0x1F330);
            put("[?]", 0x1F33C);
            put("[?]", 0x1F33F);
            put("[]", 0x1F352);
            put("[]", 0x1F34C);
            put("[?]", 0x1F34E);
            put("[?]", 0x1F34A);
            put("[]", 0x1F353);
            put("[]", 0x1F349);
            put("[?]", 0x1F345);
            put("[]", 0x1F346);
            put("[?]", 0x1F348);
            put("[???]", 0x1F34D);
            put("[?]", 0x1F347);
            put("[?]", 0x1F351);
            put("[?]", 0x1F34F);

            put("[]", 0xE693);
            put("[]", 0x270B);
            put("[]", 0x270C);
            put("[]", 0x1F44A);
            put("[]", 0x1F44D);
            put("[no]", 0x261D);
            put("[]", 0x1F446);
            put("[]", 0x1F447);
            put("[]", 0x1F448);
            put("[?]", 0x1F449);
            put("[]", 0x1F44B);
            put("[]", 0x1F44F);
            put("[ok]", 0x1F44C);
            put("[]", 0x1F44E);
            put("[]", 0x1F450);

            put("[?]", 0x1F440);
            put("[]", 0x1F442);
            put("[?]", 0x1F443);
            put("[]", 0x1F444);
            put("[]", 0x1F445);
            put("[?]", 0x1F484);
            put("[]", 0x1F485);
            put("[]", 0x1F486);
            put("[??]", 0x1F487);
            put("[??]", 0x1F488);
            put("[?]", 0x1F464);
            put("[]", 0x1F466);
            put("[]", 0x1F467);
            put("[]", 0x1F468);
            put("[]", 0x1F469);
            put("[]", 0x1F46A);
            put("[]", 0x1F46B);
            put("[]", 0x1F46E);
            put("[]", 0x1F46F);
            put("[]", 0x1F470);
            put("[?]", 0x1F471);
            put("[]", 0x1F472);
            put("[]", 0x1F473);
            put("[?]", 0x1F474);
            put("[?]", 0x1F475);
            put("[baby]", 0x1F476);
            put("[]", 0x1F477);
            put("[]", 0x1F478);
            put("[]", 0x1F479);
            put("[]", 0x1F47A);
            put("[?]", 0x1F47B);
            put("[]", 0x1F47C);
            put("[]", 0x1F47D);
            put("[]", 0x1F47E);
            put("[?]", 0x1F47F);
            put("[]", 0x1F480);
            put("[?]", 0x1F481);
            put("[]", 0x1F482);
            put("[]", 0x1F483);

            put("[]", 0x1F40C);
            put("[]", 0x1F40D);
            put("[]", 0x1F40E);
            put("[]", 0x1F414);
            put("[]", 0x1F417);
            put("[]", 0x1F42B);
            put("[]", 0x1F418);
            put("[]", 0x1F428);
            put("[]", 0x1F412);
            put("[]", 0x1F411);
            put("[]", 0x1F419);
            put("[]", 0x1F41A);
            put("[]", 0x1F41B);
            put("[?]", 0x1F41C);
            put("[]", 0x1F41D);
            put("[]", 0x1F41E);
            put("[]", 0x1F420);
            put("[]", 0x1F421);
            put("[]", 0x1F422);
            put("[?]", 0x1F424);
            put("[?]", 0x1F425);
            put("[?]", 0x1F426);
            put("[?]", 0x1F423);
            put("[?]", 0x1F427);
            put("[]", 0x1F429);
            put("[]", 0x1F41F);
            put("[]", 0x1F42C);
            put("[?]", 0x1F42D);
            put("[?]", 0x1F42F);
            put("[]", 0x1F431);
            put("[]", 0x1F433);
            put("[]", 0x1F434);
            put("[?]", 0x1F435);
            put("[]", 0x1F436);
            put("[]", 0x1F437);
            put("[]", 0x1F43B);
            put("[]", 0x1F439);
            put("[?]", 0x1F43A);
            put("[?]", 0x1F42E);
            put("[?]", 0x1F430);
            put("[?]", 0x1F438);
            put("[??]", 0x1F43E);
            put("[]", 0x1F432);
            put("[]", 0x1F43C);
            put("[?]", 0x1F43D);

            put("[]", 0x1F63A);
            put("[]", 0x1F638);
            put("[]", 0x1F639);
            put("[]", 0x1F63D);
            put("[]", 0x1F63B);
            put("[]", 0x1F63F);
            put("[]", 0x1F63E);
            put("[]", 0x1F63C);
            put("[]", 0x1F640);
            put("[??]", 0x1F645);
            put("[ok]", 0x1F646);
            put("[]", 0x1F647);
            put("[??]", 0x1F648);
            put("[??]", 0x1F64A);
            put("[??]", 0x1F649);
            put("[]", 0x1F64B);
            put("[?]", 0x1F64C);
            put("[]", 0x1F64D);
            put("[]", 0x1F64E);
            put("[?]", 0x1F64F);

            put("[?]", 0x1F3E0);
            put("[]", 0x1F3E1);
            put("[]", 0x1F3E2);
            put("[?]", 0x1F3E3);
            put("[]", 0x1F3E5);
            put("[]", 0x1F3E6);
            put("[ATM]", 0x1F3E7);
            put("[]", 0x1F3E8);
            put("[]", 0x1F3E9);
            put("[24?]", 0x1F3EA);
            put("[]", 0x1F3EB);
            put("[]", 0x26EA);
            put("[]", 0x26F2);
            put("[]", 0x1F3EC);
            put("[?]", 0x1F3EF);
            put("[?]", 0x1F3F0);
            put("[]", 0x1F3ED);
            put("[]", 0x2693);
            put("[?]", 0x1F3EE);
            put("[]", 0x1F5FB);
            put("[]", 0x1F5FC);
            put("[?]", 0x1F5FD);
            put("[]", 0x1F5FE);
            put("[]", 0x1F5FF);

            put("[]", 0x1F45E);
            put("[?]", 0x1F45F);
            put("[]", 0x1F460);
            put("[]", 0x1F461);
            put("[?]", 0x1F462);
            put("[?]", 0x1F463);
            put("[]", 0x1F453);
            put("[?]", 0x1F455);
            put("[]", 0x1F456);
            put("[]", 0x1F451);
            put("[]", 0x1F454);
            put("[??]", 0x1F452);
            put("[?]", 0x1F457);
            put("[?]", 0x1F458);
            put("[?]", 0x1F459);
            put("[]", 0x1F45A);
            put("[]", 0x1F45B);
            put("[]", 0x1F45C);
            put("[]", 0x1F45D);
            put("[]", 0x1F4B0);
            put("[??]", 0x1F4B1);
            put("[]", 0x1F4B9);
            put("[]", 0x1F4B2);
            put("[?]", 0x1F4B3);
            put("[RMB]", 0x1F4B4);
            put("[]", 0x1F4B5);
            put("[]", 0x1F4B8);
            put("[?]", 0x1F525);
            put("[]", 0x1F526);
            put("[]", 0x1F527);
            put("[?]", 0x1F528);
            put("[?]", 0x1F529);
            put("[]", 0x1F52A);
            put("[]", 0x1F52B);
            put("[?]", 0x1F52E);
            put("[]", 0x1F52F);
            put("[?]", 0x1F530);
            put("[?]", 0x1F531);
            put("[]", 0x1F489);
            put("[?]", 0x1F48A);
            put("[A]", 0x1F170);
            put("[B]", 0x1F171);
            put("[AB]", 0x1F18E);
            put("[O]", 0x1F17E);
            put("[?]", 0x1F380);
            put("[]", 0x1F381);
            put("[]", 0x1F382);
            put("[]", 0x1F384);
            put("[?]", 0x1F385);
            put("[??]", 0x1F38C);
            put("[?]", 0x1F386);
            put("[?]", 0x1F388);
            put("[]", 0x1F389);
            put("[]", 0x1F38D);
            put("[]", 0x1F38E);
            put("[]", 0x1F393);
            put("[]", 0x1F392);
            put("[?]", 0x1F38F);
            put("[]", 0x1F387);
            put("[]", 0x1F390);
            put("[??]", 0x1F383);
            put("[?]", 0x1F38A);
            put("[]", 0x1F38B);
            put("[?]", 0x1F391);
            put("[]", 0x1F4DF);
            put("[?]", 0x260E);
            put("[?]", 0x1F4DE);
            put("[]", 0x1F4F1);
            put("[?]", 0x1F4F2);
            put("[]", 0x1F4DD);
            put("[]", 0x1F4E0);
            put("[]", 0x2709);
            put("[?]", 0x1F4E8);
            put("[?]", 0x1F4E9);
            put("[]", 0x1F4EA);
            put("[]", 0x1F4EB);
            put("[]", 0x1F4EE);
            put("[]", 0x1F4F0);
            put("[]", 0x1F4E2);
            put("[?]", 0x1F4E3);
            put("[]", 0x1F4E1);
            put("[]", 0x1F4E4);
            put("[]", 0x1F4E5);
            put("[]", 0x1F4E6);
            put("[]", 0x1F4E7);
            put("[ABCD]", 0x1F520);
            put("[abcd]", 0x1F521);
            put("[1234]", 0x1F522);
            put("[?]", 0x1F523);
            put("[abc]", 0x1F524);
            put("[]", 0x2712);
            put("[?]", 0x1F4BA);
            put("[]", 0x1F4BB);
            put("[]", 0x270F);
            put("[]", 0x1F4CE);
            put("[]", 0x1F4BC);
            put("[]", 0x1F4BD);
            put("[]", 0x1F4BE);
            put("[]", 0x1F4BF);
            put("[DVD]", 0x1F4C0);
            put("[?]", 0x2702);
            put("[]", 0x1F4CD);
            put("[??]", 0x1F4C3);
            put("[]", 0x1F4C4);
            put("[]", 0x1F4C5);
            put("[]", 0x1F4C1);
            put("[]", 0x1F4C2);
            put("[]", 0x1F4D3);
            put("[]", 0x1F4D6);
            put("[]", 0x1F4D4);
            put("[]", 0x1F4D5);
            put("[]", 0x1F4D7);
            put("[?]", 0x1F4D8);
            put("[]", 0x1F4D9);
            put("[]", 0x1F4DA);
            put("[???]", 0x1F4DB);
            put("[?]", 0x1F4DC);
            put("[?]", 0x1F4CB);
            put("[]", 0x1F4C6);
            put("[]", 0x1F4CA);
            put("[?]", 0x1F4C8);
            put("[?]", 0x1F4C9);
            put("[]", 0x1F4C7);
            put("[]", 0x1F4CC);
            put("[]", 0x1F4D2);
            put("[]", 0x1F4CF);
            put("[?]", 0x1F4D0);
            put("[]", 0x1F4D1);
            put("[]", 0x1F3BD);
            put("[?]", 0x26BE);
            put("[?]", 0x26F3);
            put("[?]", 0x1F3BE);
            put("[?]", 0x26BD);
            put("[?]", 0x1F3BF);
            put("[?]", 0x1F3C0);
            put("[]", 0x1F3C1);
            put("[]", 0x1F3C2);
            put("[]", 0x1F3C3);
            put("[]", 0x1F3C4);
            put("[?]", 0x1F3C6);
            put("[?]", 0x1F3C8);
            put("[]", 0x1F3CA);
            put("[]", 0x1F683);
            put("[?]", 0x1F687);
            put("[M]", 0x24C2);
            put("[]", 0x1F684);
            put("[?]", 0x1F685);
            put("[]", 0x1F697);
            put("[]", 0x1F699);
            put("[]", 0x1F68C);
            put("[]", 0x1F68F);
            put("[]", 0x1F6A2);
            put("[]", 0x2708);
            put("[]", 0x26F5);
            put("[?]", 0x1F689);
            put("[?]", 0x1F680);
            put("[]", 0x1F6A4);
            put("[]", 0x1F695);
            put("[]", 0x1F69A);
            put("[]", 0x1F692);
            put("[]", 0x1F691);
            put("[]", 0x1F693);
            put("[]", 0x26FD);
            put("[?]", 0x1F17F);
            put("[?]", 0x1F6A5);
            put("[]", 0x1F6A7);
            put("[]", 0x1F6A8);
            put("[]", 0x2668);
            put("[?]", 0x26FA);
            put("[]", 0x1F3A0);
            put("[]", 0x1F3A1);
            put("[]", 0x1F3A2);
            put("[]", 0x1F3A3);
            put("[]", 0x1F3A4);
            put("[?]", 0x1F3A5);
            put("[?]", 0x1F3A6);
            put("[?]", 0x1F3A7);
            put("[?]", 0x1F3A8);
            put("[]", 0x1F3A9);
            put("[?]", 0x1F3AA);
            put("[]", 0x1F3AB);
            put("[?]", 0x1F3AC);
            put("[?]", 0x1F3AD);
            put("[?]", 0x1F3AE);
            put("[]", 0x1F004);
            put("[?]", 0x1F3AF);
            put("[]", 0x1F3B0);
            put("[??]", 0x1F3B1);
            put("[?]", 0x1F3B2);
            put("[]", 0x1F3B3);
            put("[]", 0x1F3B4);
            put("[]", 0x1F0CF);
            put("[?]", 0x1F3B5);
            put("[]", 0x1F3B6);
            put("[?]", 0x1F3B7);
            put("[?]", 0x1F3B8);
            put("[?]", 0x1F3B9);
            put("[??]", 0x1F3BA);
            put("[????]", 0x1F3BB);
            put("[]", 0x1F3BC);
            put("[?]", 0x303D);
            put("[]", 0x1F4F7);
            put("[?]", 0x1F4F9);
            put("[]", 0x1F4FA);
            put("[]", 0x1F4FB);
            put("[]", 0x1F4FC);
            put("[?]", 0x1F48B);
            put("[]", 0x1F48C);
            put("[]", 0x1F48D);
            put("[]", 0x1F48E);
            put("[?]", 0x1F48F);
            put("[?]", 0x1F490);
            put("[]", 0x1F491);
            put("[]", 0x1F492);
            put("[18?]", 0x1F51E);

            put("[]", 0x1F354);
            put("[?]", 0x1F359);
            put("[]", 0x1F370);
            put("[??]", 0x1F35C);
            put("[?]", 0x1F35E);
            put("[]", 0x1F373);
            put("[]", 0x1F366);
            put("[?]", 0x1F35F);
            put("[]", 0x1F361);
            put("[]", 0x1F358);
            put("[]", 0x1F35A);
            put("[?]", 0x1F35D);
            put("[]", 0x1F35B);
            put("[]", 0x1F362);
            put("[?]", 0x1F363);
            put("[]", 0x1F371);
            put("[]", 0x1F372);
            put("[]", 0x1F367);
            put("[~]", 0x1F356);
            put("[]", 0x1F365);
            put("[]", 0x1F360);
            put("[?]", 0x1F355);
            put("[]", 0x1F357);
            put("[]", 0x1F368);
            put("[]", 0x1F369);
            put("[]", 0x1F36A);
            put("[]", 0x1F36B);
            put("[]", 0x1F36C);
            put("[]", 0x1F36D);
            put("[]", 0x1F36E);
            put("[]", 0x1F36F);
            put("[]", 0x1F364);
            put("[?]", 0x1F374);
            put("[]", 0x2615);
            put("[?]", 0x1F378);
            put("[]", 0x1F37A);
            put("[]", 0x1F375);
            put("[]", 0x1F376);
            put("[?]", 0x1F377);
            put("[?]", 0x1F37B);
            put("[]", 0x1F379);
            put("[?]", 0x2197);
            put("[??]", 0x2198);
            put("[?]", 0x2196);
            put("[??]", 0x2199);
            put("[??]", 0x2934);
            put("[??]", 0x2935);
            put("[??]", 0x2194);
            put("[?]", 0x2195);
            put("[?]", 0x2B06);
            put("[?]", 0x2B07);
            put("[??]", 0x27A1);
            put("[?]", 0x2B05);
            put("[?]", 0x25B6);
            put("[]", 0x25C0);
            put("[]", 0x23E9);
            put("[]", 0x23EA);
            put("[?]", 0x23EB);
            put("[?]", 0x23EC);
            put("[]", 0x1F53A);
            put("[]", 0x1F53B);
            put("[]", 0x1F53C);
            put("[]", 0x1F53D);
            put("[]", 0x2B55);
            put("[?]", 0x274C);
            put("[]", 0x274E);
            put("[??]", 0x2757);
            put("[?]", 0x2049);
            put("[?]", 0x203C);
            put("[?]", 0x2753);
            put("[?]", 0x2754);
            put("[??]", 0x2755);
            put("[?]", 0x3030);
            put("[??]", 0x27B0);
            put("[?]", 0x27BF);
            put("[]", 0x2764);
            put("[]", 0x1F493);
            put("[]", 0x1F494);
            put("[]", 0x1F495);
            put("[]", 0x1F496);
            put("[]", 0x1F497);
            put("[]", 0x1F498);
            put("[?]", 0x1F499);
            put("[]", 0x1F49A);
            put("[]", 0x1F49B);
            put("[]", 0x1F49C);
            put("[]", 0x1F49D);
            put("[]", 0x1F49E);
            put("[]", 0x1F49F);
            put("[]", 0x2665);
            put("[]", 0x2660);
            put("[]", 0x2666);
            put("[]", 0x2663);
            put("[?]", 0x1F6AC);
            put("[??]", 0x1F6AD);
            put("[?]", 0x267F);
            put("[]", 0x1F6A9);
            put("[?]", 0x26A0);
            put("[?]", 0x26D4);
            put("[?]", 0x267B);
            put("[]", 0x1F6B2);
            put("[]", 0x1F6B6);
            put("[]", 0x1F6B9);
            put("[]", 0x1F6BA);
            put("[]", 0x1F6C0);
            put("[?]", 0x1F6BB);
            put("[]", 0x1F6BD);
            put("[WC]", 0x1F6BE);
            put("[baby]", 0x1F6BC);
            put("[]", 0x1F6AA);
            put("[?]", 0x1F6AB);
            put("[?]", 0x2714);
            put("[]", 0x1F191);
            put("[]", 0x1F192);
            put("[?]", 0x1F193);
            put("[ID]", 0x1F194);
            put("[]", 0x1F195);
            put("[NG]", 0x1F196);
            put("[OK]", 0x1F197);
            put("[SOS]", 0x1F198);
            put("[UP]", 0x1F199);
            put("[VS]", 0x1F19A);
            put("[???]", 0x1F201);
            put("[???]", 0x1F202);
            put("[?]", 0x1F232);
            put("[]", 0x1F233);
            put("[?]", 0x1F234);
            put("[]", 0x1F235);
            put("[]", 0x1F236);
            put("[]", 0x1F21A);
            put("[]", 0x1F237);
            put("[]", 0x1F238);
            put("[]", 0x1F239);
            put("[]", 0x1F22F);
            put("[]", 0x1F23A);
            put("[]", 0x3299);
            put("[?]", 0x3297);
            put("[]", 0x1F250);
            put("[?]", 0x1F251);
            put("[?]", 0x2795);
            put("[??]", 0x2796);
            put("[?]", 0x2716);
            put("[?]", 0x2797);
            put("[]", 0x1F4A0);
            put("[?]", 0x1F4A1);
            put("[]", 0x1F4A2);
            put("[]", 0x1F4A3);
            put("[]", 0x1F4A4);
            put("[]", 0x1F4A5);
            put("[?]", 0x1F4A6);
            put("[]", 0x1F4A7);
            put("[]", 0x1F4A8);
            put("[?]", 0x1F4A9);
            put("[]", 0x1F4AA);
            put("[]", 0x1F4AB);
            put("[?]", 0x1F4AC);
            put("[?]", 0x2728);
            put("[]", 0x2734);
            put("[?]", 0x2733);
            put("[?]", 0x26AA);
            put("[]", 0x26AB);
            put("[]", 0x1F534);
            put("[?]", 0x1F535);
            put("[?]", 0x1F532);
            put("[?]", 0x1F533);
            put("[]", 0x2B50);
            put("[?]", 0x2B1C);
            put("[?]", 0x2B1B);

            put("[?]", 0x1F536);
            put("[??]", 0x1F537);
            put("[??]", 0x1F538);
            put("[??]", 0x1F539);
            put("[]", 0x2747);
            put("[]", 0x1F4AE);
            put("[100]", 0x1F4AF);
            put("[]", 0x21A9);
            put("[]", 0x21AA);
            put("[]", 0x1F503);
            put("[?]", 0x1F50A);
            put("[]", 0x1F50B);
            put("[?]", 0x1F50C);

            put("[]", 0x1F50D);
            put("[]", 0x1F50E);
            put("[?]", 0x1F512);
            put("[?]", 0x1F513);
            put("[?]", 0x1F50F);
            put("[?]", 0x1F510);
            put("[]", 0x1F511);
            put("[]", 0x1F514);
            put("[?]", 0x2611);
            put("[]", 0x1F518);
            put("[]", 0x1F516);
            put("[]", 0x1F517);
            put("[?]", 0x1F519);
            put("[?]", 0x1F51A);
            put("[???]", 0x1F51B);
            put("[?]", 0x1F51C);
            put("[Top]", 0x1F51D);
            put("[?]", 0x2705);

        }

        public static ReplacementsMap getInstance() {
            if (mInstance == null) {
                mInstance = new ReplacementsMap();
            }
            return mInstance;
        }

    }

    private static String getUnicodeChar(int codepoint) {
        return new String(Character.toChars(codepoint));
    }

    /** Constructs a regular expression which ensures that the emoticon is not part of a longer string of special chars (e.g. <:)))> or <http://> which both include basic emoticons) */
    private static String getEmoticonSearchRegex(String emoticon) {
        return REGEX_NEGATIVE_LOOKBEHIND + "(" + Pattern.quote(emoticon) + ")" + REGEX_NEGATIVE_LOOKAHEAD;
    }

    /**
     * Replaces all emoticons in the given text with their corresponding Unicode Emoji
     *
     * @param text the String to search and replace in
     * @return the new String containing the Unicode Emoji
     */
    public static String replaceInText(String text) {
        return replaceInText(text, false);
    }

    /**
     * Converts between emoticons and their corresponding Unicode Emoji in the given text
     *
     * @param text the String to search and replace in
     * @param reverse whether to replace emoticons with emoji as usual (false) or revert emoji to emoticons (true)
     * @return the new String containing the the converted entities
     */
    public static String replaceInText(String text, boolean reverse) {
        final ReplacementsMap replacements = ReplacementsMap.getInstance();
        String emoticon;
        Integer codepoint;

        for (Map.Entry<String, Integer> entry : replacements.entrySet()) {
            if (entry != null) {
                emoticon = entry.getKey();
                codepoint = entry.getValue();
                if (emoticon != null && codepoint != null) {
                    String unicodeChar = getUnicodeChar(codepoint.intValue());
                    if (reverse) {
                        text = text.replace(unicodeChar, emoticon);
                    } else {
                        text = text.replaceAll(getEmoticonSearchRegex(emoticon), unicodeChar);
                    }
                }
            }
        }

        // 
        //text = filter(text);

        return text;
    }

    private static String regex = "[\ud83c\udc00-\ud83c\udfff]|[\ud83d\udc00-\ud83d\udfff]|[\u25b6-\u25c0]|[\u25e9-\u25ec]|[\u23e9-\u23ec]|[\u2b05-\u2b07]|[\u27a1]|[\u2194-\u2199]|[\u2934-\u2935]|[\u21a9-\u21aa]|[\u200d]|[\u2764\ufe0f]|[\u261d]|[\u270a-\u270c]|[\u2600-\u2615]|[\u2648-\u264f]|[\u2764\ufe0f]|[\u261d]|[\u270a-\u270c]|[\u2600-\u2615]|[\u26a0-\u26a1]|[\u26aa-\u26ab]|[\u26c4-\u26c5]|[\u26ce]|[\u25fb-\u25fe]|[\u2753-\u2757]|[\u2744-\u274f]|[\u2b50]|[\u26f2-\u26fa]|[\u26bd-\u26be]|[\u2708-\u270f]|[\u2728]|[\u26bd-\u26be]|[\u26fd]|[\u3297-\u3299]|[\u2650-\u2653]"
            + "|[\u2693]|[\u26ea]|[\u231a]|[\u23f0]|[\u23f3]|[\u231b]|[\u2702]|[\u2712]|[\u26d4]|[\u2733]|[\u2705]|[\u2734]"
            + "|[\u2668]|[\u267b]|[\u2660]|[\u2663]|[\u2665]|[\u2666]|[\u25aa]|[\u25ab]|[\u2b1b]|[\u2b1c]|[\u267f]|[\u2b55]|[\u24c2]|[\u2139]|[\u2795]|[\u2796]|[\u3030]|[\u2797]|[\u2716]|[\u2714]|[\u2122]|[\u27b0]|[\u27bf]|[\u303d]"
            + "|[\u20e3]|[\u263a]";
    private static Pattern pattern = Pattern.compile(regex, Pattern.UNICODE_CASE | Pattern.CASE_INSENSITIVE);

    private static String filter(String inputString) {
        return pattern.matcher(inputString).replaceAll("[]");
    }
}