class RussianWordTokenizer extends WordTokenizer {

  private static final Pattern PATTERN_1 = Pattern.compile("б/у");
  private static final Pattern PATTERN_2 = Pattern.compile("б/н");
  private static final Pattern PATTERN_3 = Pattern.compile(" .. ", Pattern.LITERAL);
  private static final Pattern PATTERN_4 = Pattern.compile(" . ", Pattern.LITERAL);
  private static final Pattern PATTERN_5 = Pattern.compile(" .", Pattern.LITERAL);
  private static final Pattern PATTERN_6 = Pattern.compile("\u0001\u0001SP_DDOT_SP\u0001\u0001");
  private static final Pattern PATTERN_7 = Pattern.compile("\u0001\u0001SP_DOT_SP\u0001\u0001");
  private static final Pattern PATTERN_8 = Pattern.compile("\u0001\u0001SOCR_BU\u0001\u0001");
  private static final Pattern PATTERN_9 = Pattern.compile("\u0001\u0001SOCR_BN\u0001\u0001");
  private static final Pattern PATTERN_10 = Pattern.compile("\u0001\u0001SP_DOT\u0001\u0001");

  @Override
  public String getTokenizingCharacters() {
    return super.getTokenizingCharacters() + "'.";
  }
  
  @Override
  public List<String> tokenize(String text) {<FILL_FUNCTION_BODY>}

  private List<String> wordsToAdd(String s) {
    List<String> l = new ArrayList<>();
    l.add(s);
    return l;
  }

}

    List<String> l = new ArrayList<>();
    String auxText = text;
    auxText = PATTERN_1.matcher(auxText).replaceAll("\u0001\u0001SOCR_BU\u0001\u0001");
    auxText = PATTERN_2.matcher(auxText).replaceAll("\u0001\u0001SOCR_BN\u0001\u0001");
    auxText = PATTERN_3.matcher(auxText).replaceAll("\u0001\u0001SP_DDOT_SP\u0001\u0001");
    auxText = PATTERN_4.matcher(auxText).replaceAll("\u0001\u0001SP_DOT_SP\u0001\u0001");
    auxText = PATTERN_5.matcher(auxText).replaceAll(" \u0001\u0001SP_DOT\u0001\u0001");
    auxText = PATTERN_6.matcher(auxText).replaceAll(" .. ");
    auxText = PATTERN_7.matcher(auxText).replaceAll(" . ");

    StringTokenizer st = new StringTokenizer(auxText, getTokenizingCharacters() , true);
    while (st.hasMoreElements()) {
      String s = st.nextToken();
      s = PATTERN_8.matcher(s).replaceAll("б/у");
      s = PATTERN_9.matcher(s).replaceAll("б/н");
      s = PATTERN_10.matcher(s).replaceAll(".");
      l.addAll(wordsToAdd(s));
    }
    return joinEMailsAndUrls(l);
  
<methods>public non-sealed void <init>() ,public static List<java.lang.String> getProtocols() ,public java.lang.String getTokenizingCharacters() ,public boolean isCurrencyExpression(java.lang.String) ,public static boolean isEMail(java.lang.String) ,public static boolean isUrl(java.lang.String) ,public List<java.lang.String> replaceEmojis(java.lang.String) ,public List<java.lang.String> restoreEmojis(List<java.lang.String>, List<java.lang.String>) ,public List<java.lang.String> splitCurrencyExpression(java.lang.String) ,public List<java.lang.String> tokenize(java.lang.String) <variables>private static final java.util.regex.Pattern CURRENCY_EXPRESSION,private static final java.util.regex.Pattern CURRENCY_SYMBOLS,private static final java.util.regex.Pattern CURRENCY_VALUE,private static final java.util.regex.Pattern DOMAIN_CHARS,private static final java.util.regex.Pattern E_MAIL,private static final java.util.regex.Pattern NO_PROTOCOL_URL,private static final List<java.lang.String> PROTOCOLS,protected final java.lang.String REMOVED_EMOJI,private static final java.lang.String TOKENIZING_CHARACTERS,private static final java.util.regex.Pattern URL_CHARS