我正在編寫一些用於生成隨機字符串的代碼。結果字符串似乎包含無效的char
組合。具體而言,我發現很高的代理人沒有跟隨低代理人。如何生成包含補充字符的隨機Unicode字符串?
任何人都可以解釋爲什麼發生這種情況?我是否必須明確地生成一個隨機低代理來跟隨高代理?我以爲這是不需要的,因爲我使用Character
類的int
變體。
這裏的測試代碼,這在最近的運行產生以下不好的配對:
Bad pairing: d928 - d863 Bad pairing: da02 - 7bb6 Bad pairing: dbbc - d85c Bad pairing: dbc6 - d85c
public static void main(String[] args) {
Random r = new Random();
StringBuilder builder = new StringBuilder();
int count = 500;
while (count > 0) {
int codePoint = r.nextInt(Character.MAX_CODE_POINT + 1);
if (!Character.isDefined(codePoint)
|| Character.getType(codePoint) == Character.PRIVATE_USE) {
continue;
}
builder.appendCodePoint(codePoint);
count--;
}
String result = builder.toString();
// Test the result
char lastChar = 0;
for (int i = 0; i < result.length(); i++) {
char c = result.charAt(i);
if (Character.isHighSurrogate(lastChar) && !Character.isLowSurrogate(c)) {
System.out.println(String.format("Bad pairing: %s - %s",
Integer.toHexString(lastChar), Integer.toHexString(c)));
}
lastChar = c;
}
}
Character.isDefined的代理人返回true。 – VGR