2016-08-12 6 views
4

現在のプログラミングプロジェクトでは、 'ä'、 'ö'または 'ü'のようなASCII以外のウムラウトを含む単語を、Unicodeを含む単語/文字列に変換する機能が必要です\u00F6)。ストリームを使用して既知のインデックスで文字列を操作する

これを達成するには、「新しい」Javaストリームを試したかったのです。 これまでのところ、私はデフォルトのASCII文字セットに収まらない文字のすべてのインデックスを得ることができたので、置き換える必要があります。

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

は、しかし、私は本当にきれいに、それぞれのUnicode表現で識別指標でウムラウトを交換する方法を見つけることができません。 1つのパラダイムを維持するために、私はStreamソリューションを見つけたいと思っていますが、私はこの問題を解決するための他の効率的なソリューションにもオープンしています。

また、全体的な問題に対して、まったく異なるアプローチ(おそらくより簡単なアプローチ)が評価されます。

+0

Javaの文字は、Unicodeに既にあります。あなたは正確に何をしようとしていますか? – 4castle

+0

Java文字列を '{somename} .properties'ファイルに保存します。私はいくつかのエンコーディングの問題(WindowsマシンではCP1252、他のシステムではUTF-8)を経験したので、後で問題を避けるために 'pers \ n00Fichl'という文字列を' pers \したがって、 'persönlich'や類似の単語を使って作業することは、Java内でうまく動作しますが、これまでのところ、永続性のために明示的な変換は非常に便利だと強く信じています。 –

+1

@ MarcoN。何かをする前に、[this](http://www.joelonsoftware.com/articles/Unicode.html)を読んでください。巧みにしようとしないでください。そうしないと、[彼]のような状況に陥るかもしれません(http://stackoverflow.com/questions/38890321/recover-wrongly-encoded-character-java/38890501)。 – Kayaman

答えて

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)); 
    } 

だろうそれとも、 "streamishを" それをしたい場合:

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); 
関連する問題