用NULL拆分UTF16字符串的简单方法
Simple way to split UTF16 string by NULL
我正在从字节数组中提取 UTF16 字符串,字符串由一个或多个 NULL(U+0000) 分隔,当我打印转换后的字符串时,它会自动修剪 NULL,下面的示例程序输出 "WinWin"
import java.nio.charset.Charset;
class Ucs {
public static void main(String[] args) {
byte[] b = new byte[] {87, 0, 105, 0, 110, 0, 0, 0, 0, 0, 87, 0, 105, 0, 110, 0, 0, 0};
String s = new String(b, Charset.forName("UTF-16LE"));
System.out.println(s);
}
}
但我希望它们像 "Win Win" 一样分开,前提是我将 s
分开。我知道我可以在 for 循环中找到 NULL 字符,这真的很讨厌。有没有简单的方法可以做到这一点?
您可以使用 split
:
System.out.println(Arrays.asList(s.split("\00")));
您可以使用名为 replaceAll() 的方法。使用起来非常简单。
string.replaceAll("<the letter you want to replace>", "");
请注意,如果这正是您要寻找的,这不会真正提高您的表现。
我正在从字节数组中提取 UTF16 字符串,字符串由一个或多个 NULL(U+0000) 分隔,当我打印转换后的字符串时,它会自动修剪 NULL,下面的示例程序输出 "WinWin"
import java.nio.charset.Charset;
class Ucs {
public static void main(String[] args) {
byte[] b = new byte[] {87, 0, 105, 0, 110, 0, 0, 0, 0, 0, 87, 0, 105, 0, 110, 0, 0, 0};
String s = new String(b, Charset.forName("UTF-16LE"));
System.out.println(s);
}
}
但我希望它们像 "Win Win" 一样分开,前提是我将 s
分开。我知道我可以在 for 循环中找到 NULL 字符,这真的很讨厌。有没有简单的方法可以做到这一点?
您可以使用 split
:
System.out.println(Arrays.asList(s.split("\00")));
您可以使用名为 replaceAll() 的方法。使用起来非常简单。
string.replaceAll("<the letter you want to replace>", "");
请注意,如果这正是您要寻找的,这不会真正提高您的表现。