### Question:
HyphenNormalizer implements TextProcessor { @Override public List<String> preprocess(final List<String> tokens) { return tokens.stream().map(HyphenNormalizer::normalizeHyphens).collect(Collectors.toList()); }  static boolean isHyphenLike(final Integer codePoint); static String normalizeHyphens(final String s); @Override List<String> preprocess(final List<String> tokens);  }### Answer:
@Test public void testHyphenNormalization() { final String hyphens1 = "-\u002D\u007E\u058A\u05BE\u2010\u2011\u2012\u2013\u2014\u2015\u2053"; final String softHyphen = " Uni\u00adcode "; final String hyphens2 = "\u207B\u208B\u2212\u2E3A\u2E3B\u301C\u3030\uFE31\uFE32\uFE58\uFE63\uFF0D"; final String sentence = hyphens1 + softHyphen + hyphens2; final String expected = "------------ Unicode ------------"; final SimpleTokenizer tokenizer = new SimpleTokenizer(); final List<String> tokens = tokenizer.tokenize(sentence); final HyphenNormalizer hyphenNormalizer = new HyphenNormalizer(); final List<String> processedTokens = hyphenNormalizer.preprocess(tokens); Assert.assertEquals(tokenizer.buildSentence(processedTokens), expected); }