3

我有一个在 Java 中编码为字符数组的 C 样式字符串,但我想将此数组转换为 Java 字符串。我尝试使用匹配的构造函数调用,

String toRet = new String(new char[]{'B','A','D','\0', 'G', 'A', 'R', 'B', 'A', 'G', 'E'});
System.out.println(Arrays.toString(toRet.toCharArray()));

但结果是不正确的,实际上是奇怪的错误。上面的代码输出如下:

[B, A, D,

这就是我想要的

[B, A, D]

我在 Ubuntu 上的 openJdk6 上运行。我还没有在其他虚拟机上测试过上面的代码。

4

3 回答 3

1

这里不需要字符串参与。只需复制到一个比输入数组短一个字符的新数组中。用于此任务的方法是Arrays.copyOf

您的输出有问题的原因是 Java 中的字符串与空终止符无关。您的第一行代码创建了一个字符串,其最后一个字符是空字符。

回复您更新的问题

如果您在 null-char 后面有垃圾,您可以使用new String(inputArray),然后找到 null-charString.indexOf('\0')并在String.substring操作中使用它来删除不需要的部分。但是,仅迭代数组以定位空字符然后Arrays.copyOf将该索引用作截止点会更简单(从时间/空间复杂性的角度来看)。

于 2012-10-23T09:42:22.867 回答
0

您可以使用trim()删除空格字符:

System.out.println(Arrays.toString(toRet.trim().toCharArray()));
于 2012-10-23T09:50:49.127 回答
0

为了让必须维护您的代码的人感到困惑,您可以编写:

char[] dta = new char[]{'B','A','D','\0', 'G', 'A', 'R', 'B', 'A', 'G', 'E'};

String string = (dta[0] == '\0') ? "" : (new String(dta)).split("\0")[0];
System.out.println(string.toCharArray());
于 2012-10-23T10:17:29.800 回答