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,处理起来有时就会比较麻烦。

标签: none

添加新评论

ali-01.gifali-58.gifali-09.gifali-23.gifali-04.gifali-46.gifali-57.gifali-22.gifali-38.gifali-13.gifali-10.gifali-34.gifali-06.gifali-37.gifali-42.gifali-35.gifali-12.gifali-30.gifali-16.gifali-54.gifali-55.gifali-59.gif

加载中……