2015-12-22 147 views
1

从字节数组创建字符串时遇到问题,其中构建字符串时忽略数组中的0值。我怎么能这样做,如果字节值是0,字符串只是简单地添加一个空格而不是删除它。Java从包含空格的字节数组创建字符串

例如,输出为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

感谢

+2

我相信你也应该告诉我们哪些_encoding_您正在使用解码字节数组。 –

+0

我正在将内存中的字节直接读入一个字节数组中。 –

+0

我测试了代码输出是:DT_TestTraceline CTestTraceli – Abdelhak

回答

9

你应该指定一个编码new String() - 无其一,您使用的是平台默认值(这会让您的代码更加便于携带,因为您现在正在假设您正在执行的环境)。

假设你使用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

4

一个办法是把它变成一个字符串,并更换“0”字符与字符代码空间,任何字符编码,你之前迭代这个数组使用