gpt4 book ai didi

java - 将 String 转换为 Unicode 时的数组大小问题

转载 作者:行者123 更新时间:2023-12-01 11:15:34 25 4
gpt4 key购买 nike

我在一个类中有一个字符串“text”,它调用另一个类中的方法以各种方式转换文本。在这个方法中,虽然我留下了“ArrayIndexOutOfBoundsException”错误。

public String toUnicode() {
char unicodeTextArray[] = new char[text.length()];

if (text == null || text.isEmpty()) {
return "";
}

String unicodeTextArrayString[] = new String[text.length()];

for (int i = 0; i < text.length(); i++) {

unicodeTextArray[i] = text.charAt(i);

if (unicodeTextArray[i] < 0x10) {
unicodeTextArrayString[i] = "\\u000" + Integer.toHexString(unicodeTextArray[i]);
} else if (unicodeTextArray[i] < 0x100) {
unicodeTextArrayString[i] = "\\u00" + Integer.toHexString(unicodeTextArray[i]);
} else if (unicodeTextArray[i] < 0x1000) {
unicodeTextArrayString[i] = "\\u0" + Integer.toHexString(unicodeTextArray[i]);
}
unicodeTextArrayString[i] = "\\u" + Integer.toHexString(unicodeTextArray[i]);
}

String unicode = unicodeTextArrayString[text.length()];
return unicode;
}

将一行更改为任意大的数字,例如:

String unicodeTextArrayString[] = new String[9999];

结果没有错误,但返回 null。

我考虑过设置一个 int 变量来增加数组的长度,但是 * 4 的数组大小仍然太小,而且看起来如果我太大它只会返回 null。

我怎样才能获得正确的数组长度?

编辑:我发现一种有效的非数组方法,但我仍然想知道是否有办法使上述数组方法以某种方式工作。

public String toUnicode() 
{
String unicodeString = "";

for (int i = 0; i < text.length(); i++)
{
char c = text.charAt(i);
String s = String.format ("\\u%04x", (int)c);
unicodeString = unicodeString + s;
}
return unicodeString;
}

编辑 2:如果有人读到此内容感到好奇,请获取 unicode 的十进制值:

    public String toUnicode() 
{
String unicodeString = "";

for (int i = 0; i < text.length(); i++)
{
char c = text.charAt(i);
int unicodeDecimal = c;
unicodeString = unicodeString + unicodeDecimal + " ";
}
return unicodeString;
}

编辑3:我最终决定使用以下内容,它用空格分隔unicode小数,并检查unicode值10(这意味着新行)并将新行输出到字符串中而不是该值。

    public String toUnicode() 
{
String unicodeString = "";

for (int i = 0; i < text.length(); i++)
{
char c = text.charAt(i);
int unicodeDecimal = c;

if (unicodeDecimal == 10)
{
unicodeString = unicodeString + "\n";
}
else
{
unicodeString = unicodeString + unicodeDecimal + " ";
}

}
return unicodeString;
}

最佳答案

有几件事

1) 移动线char unicodeTextArray[] = new char[text.length()]; 在以下代码之后

    if (text == null || text.isEmpty())
{
return "";
}
char unicodeTextArray[] = new char[text.length()];

2) 错误是因为这个 String unicode = unicodeTextArrayString[text.length()];

例如,您得到一个文本“hello”,然后您初始化了大小为 text.length() 的 unicodeTextArrayString,即 5。因此,您只能从该数组中获取索引 0 到 4,但您正尝试从索引 5,超出范围。

3)话虽如此,代码/逻辑似乎是错误的。我只是使用 StringBuilder 修改了你的逻辑。您可以检查转换逻辑

public static String toUnicode(String text)
{
if (text == null || text.isEmpty())
{
return "";
}
StringBuilder unicodeTextArrayString = new StringBuilder();
for (int i = 0; i < text.length(); i++)
{
char ch = text.charAt(i);
if (ch < 0x10)
{
unicodeTextArrayString.append("\\u000" + Integer.toHexString(ch));
}
else if (ch < 0x100)
{
unicodeTextArrayString.append("\\u00" + Integer.toHexString(ch));
}
else if (ch < 0x1000)
{
unicodeTextArrayString.append("\\u0" + Integer.toHexString(ch));
}
else
{
unicodeTextArrayString.append("\\u" + Integer.toHexString(ch));
}
}

return unicodeTextArrayString.toString();
}

4)如果您想使用基于数组的方法,则将每个字符添加到数组中,然后再次迭代存储字符的数组,然后构建一个字符串(而不是从最后一个索引获取字符串),然后返回字符串

关于java - 将 String 转换为 Unicode 时的数组大小问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31869288/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com