使用Streams操作已知索引处的字符串

时间:2016-08-12 06:40:14

标签: java string unicode java-stream diacritics

对于我正在进行的当前编程项目,我需要能够将包含非ASCII变音符号的单词(如'ä','ö'或'ü'转换为包含Unicode(\u00F6)的单词/字符串。< / p>

为实现这一目标,我想尝试'新'Java Streams。 到目前为止,我能够获得不适合默认ASCII字符集的所有字符索引,因此需要替换。

public static void replaceUmlauts() {
  char[] chars = "persönlich".toCharArray();
  int[] ind = IntStream.range(0, chars.length).filter(i -> chars[i] > 128).toArray();
}

然而,我并没有真正找到一种方法来很好地用它们各自的Unicode表示替换已识别索引处的变音符号。为了保持一种范式,我想找到一个Stream解决方案,但我也愿意接受其他有效的解决方案来解决问题。

同样完全不同 - 甚至更简单的方法 - 对整个问题都会非常感激。

1 个答案:

答案 0 :(得分:0)

一个简单的解决方案是

    String in = "persönlich";
    StringBuilder out = new StringBuilder();
    for (int i = 0; i < in.length(); i++) {
        char ch = in.charAt(i);
        out.append(ch <= 127 ? ch : "\\u" + String.format("%04x", (int)ch));
    }

或者如果你想“流水化”:

    String text = "persönlich";
    StringBuilder result = new StringBuilder();
    text.chars().forEachOrdered(c -> result.append(c < 128 ? (char) c : String.format("\\u%04X", c)));
    System.out.println(result);