从字节数组创建String时遇到问题,在构造字符串时忽略数组内的0值。我怎样才能使它如果字节值为0,那么String只是添加一个空格而不是删除它。
示例,其输出为DT_TestTracelineCTestTraceli
。
public static void main(String[] args) {
byte[] text = {68, 84, 95, 84, 101, 115, 116, 84, 114, 97, 99, 101, 108, 105, 110, 101, 0, 0, 0, 0, 67, 84, 101, 115, 116, 84, 114, 97, 99, 101, 108, 105};
System.out.println(new String(text));
}
我该如何制作它以便我可以使用制表符分隔这两个字符串或使用空格,以便输出为DT_TestTraceline CTestTraceli
由于
答案 0 :(得分:9)
您应该为new String()
指定一个编码 - 没有一个,您使用平台默认设置(这会使您的代码不那么便携,因为现在您正在对您的环境做出假设#39;重新执行)。
假设您正在使用UTF-8,您可以使用32
(空格字符的UTF-8代码)替换所有零,并且它应该有效:
for(int i = 0; i < text.length; i++) {
if(text[i] == 0) {
text[i] = 32;
}
}
String result = new String(text, StandardCharsets.UTF_8);
您可以看到它正常工作on ideone。
答案 1 :(得分:4)
一种方法是在将数组转换为字符串之前对数组进行迭代,并使用您使用的任何字符编码中的空格字符代码替换“0”字符