删除字符串

时间:2015-05-08 02:00:45

标签: java string utf-8 network-programming bytearray

我目前正在编写一个多人游戏,我正在研究它的网络方面。我有一个数据包系统设置,它的工作方式(至少使用字符串)是它需要多个字符,最多为" X"字符。字符将转换为字节以发送到服务器。如果少于X个字符,则剩余字节设置为0.问题是在服务器上处理此信息并将其转换为字符串时,0字节字符为'□&#39 ;在我的控制台中,在我的JTextPane中不可见。如何以干净的方式从字符串中删除所有这些0字节字符?在转换为String之前,我不想再使用另一个循环和更多变量来删除0字节。没有人喜欢看起来很脏的代码。 :P

分组数据:

03100101118000000000971001091051100000000
  • 03 =数据包ID(不相关)
  • 100101118000000000 =用户名(" dev")
  • 971001091051100000000 =密码(" admin")

结果字符串:

  • usernameString =" dev□□□□□□□□□"
  • passwordString =" admin□□□□□□□"

我尝试过的事情:

usernameString.replaceAll(new String(new byte[] {0}, "UTF-8"), "");
passwordString.replaceAll(new String(new byte[] {0}, "UTF-8"), "");

但是,这根本没有改变字符串。

2 个答案:

答案 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。)不确定为什么它不适合你。可能还有另一个问题。确保重新分配结果。 ; )