2016-08-10 13 views
1

Ascii制御文字をロギング目的の文字の適切なUnicode記号に置き換える簡単な方法を探しています。ASCII制御文字を制御文字のUnicode記号に置き換えます。

例:

  • ASCII→所望の出力
  • は0x00→␀(U + 2400)
  • は0x01→␁(U + 2401)
  • 0×02→␂(U + 2402)
  • 0x1Fの→␟(U + 241F)

私の入力は既知の長さのバイト配列です。私は現在new String(byData, 0, nLength, StandardCharsets.US_ASCII).replaceAll("\\W", "�");を使用していますが、これはキャリッジリターン(␍)のような有益な情報を削除しています。

私は手動で32個の制御文字のそれぞれを検索して置き換えることができますが、より速く、より速くなる方法があると思います。

私のプロジェクトにはGuavaがインストールされていますので、Guavaの魔法がある場合は教えてください。

私はJava 7/Androidを使用しています。

答えて

1

マニュアルループは、おそらくあなたの最善の策である:

String s = new String(byData, 0, nLength, StandardCharsets.US_ASCII); 
StringBuilder sb = new StringBuilder(s); 

for (int i = 0; i < sb.length(); i++) { 
    int ch = (int) sb.charAt(i); 
    if ((cp < 32) && (ch != 9) && (ch != 10) && (ch != 13)) { 
     sb.setCharAt(i, (char)(0x2400 + ch)); 
    } 
} 

s = sb.toString(); 
+0

これはとてもうまくいきました。私が書いた最終的なユーティリティメソッドと一致するようにコードを編集してもよろしいですか? – Jon

関連する問題