我有一个C风格的字符串,编码为Java中的字符数组,但我想将此数组转换为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。我没有在其他VM上测试过上面的代码。
答案 0 :(得分:1)
此处无需涉及String。只需复制到一个比输入数组短一个char的新数组。用于此任务的方法是Arrays.copyOf
。
输出错误的原因是因为Java中的字符串与null终止符无关。您的第一行代码创建一个字符串,其最后一个字符是空字符。
如果在null-char后面有垃圾,你可以使用new String(inputArray)
,然后找到带有String.indexOf('\0')
的null-char,并在String.substring
操作中使用它来删除不需要的部分。但是,从时间/空间复杂度的角度来看,只需迭代数组以找到null-char,然后将Arrays.copyOf
与该索引一起用作截止点,就更简单了。
答案 1 :(得分:0)
您可以使用trim()
删除空格字符:
System.out.println(Arrays.toString(toRet.trim().toCharArray()));
答案 2 :(得分: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());