2010-05-31 33 views

Trả lời

16

Đó sẽ là một cái gì đó giống như sau:

public static String fromCharCode(int... codePoints) { 
    StringBuilder builder = new StringBuilder(codePoints.length); 
    for (int codePoint : codePoints) { 
     builder.append(Character.toChars(codePoint)); 
    } 
    return builder.toString(); 
} 

Lưu ý rằng đúc để char không được bảo đảm để làm việc vì giá trị điểm mã có thể vượt quá giới hạn trên của char (65535). Các char được thành lập trong thời đại Java tối khi Unicode 3.1 chưa được ra ngoài mà vượt quá 65535 ký tự.

Cập nhật: String đã thực sự a constructor taking an int[] (được giới thiệu từ Java 1.5, không biết từ đầu), xử lý vấn đề này một cách chính xác. Ở trên có thể được đơn giản hóa như sau:

public static String fromCharCode(int... codePoints) { 
    return new String(codePoints, 0, codePoints.length); 
} 
+0

1 cho sự hoàn hảo Unicode, nhưng tôi nghi ngờ Javascript chức năng có thể xử lý một cách chính xác codepoints lớn hơn 65536. –

+0

Điều này dường như làm việc cho hầu hết giá trị. Tôi đang cố gắng: Chuỗi mới (new int [] {141}, 0, 1) trong bản in javascript, "?" nhưng trong java thì không. 141 không hợp lệ? Tôi đang cố gắng để gỡ lỗi một số mã obfuscation tôi chuyển từ Javascript sang Java và đang nhận được kết quả không phù hợp cho một số ký tự. – jon077

+0

Điều đó phụ thuộc vào mã hóa ký tự là một câu chuyện hoàn toàn khác. Môi trường JS rõ ràng là sử dụng một mã hóa ký tự khác với môi trường Java. Ít nhất, ở trên nên làm việc hoàn hảo cho một mã hóa ký tự Unicode như UTF-8. – BalusC

Các vấn đề liên quan