Byte数组转String不能替换空白符的问题
之前使用String的replaceAll方法是可以去除字符串中的空白符的,百试不爽,然而还是碰到硬茬了,读取到一个byte数组后转成String,里面很多间隔的空白符一直都去不掉。
References:
https://stackoverflow.com/questions/28989970/java-removing-u0000-from-an-string
Debug走了一波后发现空白符原本的byte信息是0x00,转换为Unicode编码后,是\u0000
。但是Java正则表达式引擎的空白符判断跳过的这个特殊的NULL字符。就导致了无法通过replaceAll(" ", "")
或者replaceAll("\\s+", "")
的方法去除这个字符。所以换个方法:
string = string.replace("\u0000", ""); // removes NUL chars
string = string.replace("\\u0000", ""); // removes backslash+u0000
我用了下面的一行就可以成功去掉空白符了。
多说点,在Java中处理16进制数据时,最好都转成字符串再一起处理,而不要直接转换成byte或者int。用javax.xml.bind.DatatypeConverter
工具类转换很方便。处理后像0x01
这种16进制数会转成字符串01
,如果直接使用byte或者int,那么就会变成一个1
,处理起来有时就会比较麻烦。