byte[] a = {1,2,3,0,1,2,3,0,0,0,0,4};
String s0 = new String(a, "ISO-8859-1");
String s1 = s0.replaceAll("\\x00{4,}", "");
byte[] r = s1.getBytes("ISO-8859-1");
System.out.println(Arrays.toString(r)); // [1, 2, 3, 0, 1, 2, 3, 4]
我使用 ISO-8859-1 (latin1),因为与任何其他编码不同,
这意味着字符串与原始字节数组的长度相同,您可以通过其数值将任何字节与\xFF
构造,并且您可以将结果字符串转换回字节数组而不会丢失信息。
我不会尝试display字符串形式的数据——尽管所有字符都是有效的,但其中许多字符不可打印。另外,避免操作字符串形式的数据;您可能会无意中进行一些转义序列替换或其他编码转换而没有意识到。事实上,我不会推荐根本做这种事,但这不是你要求的。 :)
另外,请注意,此技术不一定适用于其他编程语言或正则表达式风格。您必须单独测试每一项。