我目前正在编写一个多人游戏,我正在研究它的网络方面。我有一个数据包系统设置,它的工作方式(至少使用字符串)是它需要多个字符,最多为" X"字符。字符将转换为字节以发送到服务器。如果少于X个字符,则剩余字节设置为0.问题是在服务器上处理此信息并将其转换为字符串时,0字节字符为'□&#39 ;在我的控制台中,在我的JTextPane中不可见。如何以干净的方式从字符串中删除所有这些0字节字符?在转换为String之前,我不想再使用另一个循环和更多变量来删除0字节。没有人喜欢看起来很脏的代码。 :P
分组数据:
03100101118000000000971001091051100000000
结果字符串:
我尝试过的事情:
usernameString.replaceAll(new String(new byte[] {0}, "UTF-8"), "");
passwordString.replaceAll(new String(new byte[] {0}, "UTF-8"), "");
但是,这根本没有改变字符串。
答案 0 :(得分:3)
由于你的所有零都出现在字符串的末尾,即使没有定期的表达,你也可以解决这个问题:
static String trimZeros(String str) {
int pos = str.indexOf(0);
return pos == -1 ? str : str.substring(0, pos);
}
usernameString = trimZeros(usernameString);
passwordString = trimZeros(passwordString);
答案 1 :(得分:2)
usernameString = // replace 1 or more \0 at the end of the string
usernameString.replaceAll("\0+$", "");
\0
是Unicode字符的转义,其数值为0(有时称为NUL)。换句话说:
System.out.println((int) "\0".charAt(0)); // prints 0
你所尝试的似乎对我也有用。 (见Ideone example。)不确定为什么它不适合你。可能还有另一个问题。确保重新分配结果。 ; )