2017-03-03 6 views
0

私はこれを文字列の文字をループして印刷しようとしました。彼らはDeseret Long I()を除いてすべて印刷されています。これを行う他の方法があるかどうかはわかりませんので、正しく印刷されています。ここに私のコードは次のとおりです。Java:サロゲートペアを持つ文字列の文字をループして印刷するにはどうすればよいですか?

package javaapplication13; 
public class JavaApplication13 { 
    public static void main(String[] args) { 
     String s = "hy\u0500"; 
     System.out.println(s); 
     final int length = s.length(); 
     for (int offset = 0; offset < length;) { 
      final int codepoint = s.codePointAt(offset); 
      System.out.println((char) (codepoint)); 
      offset += Character.charCount(codepoint); 
     } 
    } 
} 

出力は、この(Netbeansの)次のようになります。あなたの問題は、あなたが(2バイトに4バイト)intcharに変換しようとすることに起因する

run: 
hyԀ 
h 
䍡 
y 
Ѐ 
Ԁ 
BUILD SUCCESSFUL (total time: 0 seconds) 

答えて

0

。サロゲートペアの場合、codepoint変数の値はcharに収まりません。それは文字のペアなので、ペアと呼ばれています。私はあなたがそれを印刷できる方法は、String.Substring()メソッドを使用することですと思います。あるいは、これをcharの配列に変換することができます:char[] ch = Character.toChars(codepoint);そしてこの配列を簡単にnew String(ch)で文字列に変換することができます。

+0

'System.out.println(Character.toChars(codepoint));'動作します!ありがとうございました! –

関連する問題