【发布时间】:2015-05-08 02:00:45
【问题描述】:
我目前正在编写一个多人游戏,我现在正在研究它的网络方面。我设置了一个数据包系统,它的工作方式(至少使用字符串)是它需要多个字符,最多为“X”个字符。字符被转换为字节以发送到服务器。如果少于 X 个字符,则剩余字节设置为 0。问题是,在服务器上处理此信息并将其转换为字符串时,0 字节字符在我的控制台中是“□”,并且在我的 JTextPane 中不可见。如何以干净的方式从字符串中删除所有这些 0 字节字符?我不希望有另一个循环和更多变量,只是在转换为字符串之前删除 0 字节。没有人喜欢看起来很脏的代码。 :p
数据包数据:
03100101118000000000971001091051100000000
- 03 = 数据包 ID(无关)
- 100101118000000000 = 用户名(“dev”)
- 971001091051100000000 = 密码(“admin”)
结果字符串:
- usernameString = "dev□□□□□□□□□"
- passwordString = "管理员□□□□□□□"
我尝试过的:
usernameString.replaceAll(new String(new byte[] {0}, "UTF-8"), "");
passwordString.replaceAll(new String(new byte[] {0}, "UTF-8"), "");
但是,这根本没有改变字符串。
【问题讨论】:
-
使用一些正则表达式来计算字符串的结尾是一个或多个
0 -
如果您使用 Java 7 或更高版本,最好使用
StandardCharsets.UTF_8常量而不是"UTF-8"文字。这更快,您无需处理/重新抛出UnsupportedEncodingException。 -
@TagirValeev 哇,我从来没有意识到
StandardCharsets.UTF_8与"UTF-8"文字相比要快多少。非常感谢。
标签: java string utf-8 network-programming bytearray