【发布时间】:2017-12-13 00:09:18
【问题描述】:
我正在尝试生成一个随机的 Unicode 字符字符串。我想指定每个字符占用的字节数(1-4 个字节,因为我想最终将它们转换为 UTF-8 字节数组),以及字符数。例如,如果我将字符串中的字符数指定为 10,将每个字符的字节数指定为 3,我应该得到一个字符串 str,并且当我调用时
str.getBytes(StandardCharsets.UTF_8).length
我应该得到 30 个字节。
我的代码使用 1、2 和 4 个字节为字符生成正确的字符串。但是,对于从 0x800 到 0xffff 的代码点,当我在返回的字符串上调用 getBytes 时,每次都会得到不同数量的字节。任何想法为什么会发生这种情况?
private String generateRandomString(int numberOfCharacters, int bytesPerCharacter) {
int start;
int end;
switch (bytesPerCharacter) {
case 1:
start = 0;
end = 0x7f;
break;
case 2:
start = 0x80;
end = 0x7ff;
break;
case 3:
start = 0x800;
end = 0xffff;
break;
case 4:
start = 0x10000;
end = 0x10ffff;
break;
default:
throw new ArgumentException("Invalid value for the bytes per character");
}
StringBuilder builder = new StringBuilder(numberOfCharacters);
int count = 0;
int range = end - start;
for (int i = 0; i < numberOfCharacters; i++) {
builder.appendCodePoint((int) (Math.random() * range + start));
}
return builder.toString();
}
【问题讨论】:
-
我似乎无法重现您遇到的问题。
-
它是不确定的——如果你尝试使用大量的字符(超过 200 个),我通常可以重现它。