[英]How to replace/remove 4(+)-byte characters from a UTF-8 string in Java?
[英]Remove 0-byte (UTF-8) characters in String
我目前正在編寫一個多人游戲,現在我正在網絡方面進行工作。 我已經設置了一個數據包系統,並且它的工作方式(至少與Strings一起使用)是它需要使用多個字符,最多只能包含“ X”個字符。 字符將轉換為字節以發送到服務器。 如果少於X個字符,則剩余字節設置為0。問題是,當在服務器上處理此信息並將其轉換為字符串時,0字節字符在我的控制台中是“□”,並且在我的JTextPane中不可見。 如何以一種干凈的方式從字符串中刪除所有這些0字節字符? 我不希望有另一個循環和更多的變量,只是為了在轉換為字符串之前刪除0字節。 沒有人喜歡看起來很臟的代碼。 :p
封包數據:
03100101118000000000971001091051100000000
結果字符串:
我試過的
usernameString.replaceAll(new String(new byte[] {0}, "UTF-8"), "");
passwordString.replaceAll(new String(new byte[] {0}, "UTF-8"), "");
但是,這根本沒有更改String。
usernameString = // replace 1 or more \0 at the end of the string
usernameString.replaceAll("\0+$", "");
\\0
是數字值0(有時稱為NUL)的Unicode字符的轉義符。 換一種說法:
System.out.println((int) "\0".charAt(0)); // prints 0
您嘗試的方法似乎也對我有用。 (請參閱Ideone示例 。)不知道為什么它不適合您。 可能還有另一個問題。 確保您正在重新分配結果。 ; )
由於所有零都出現在字符串的末尾,因此即使沒有規則表達式也可以解決此問題:
static String trimZeros(String str) {
int pos = str.indexOf(0);
return pos == -1 ? str : str.substring(0, pos);
}
usernameString = trimZeros(usernameString);
passwordString = trimZeros(passwordString);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.