M.E*_*.E. 2 java arrays string
我有一个字节数组,其中包含用值 0 填充的文本,最多填充 16 个字节。
当我尝试将它转换为字符串时,我无法获得正确的长度/字符串,它总是检索整个 16 个字符。
我试过了:
import java.nio.charset.StandardCharsets;
public class HelloWorld{
public static void main(String []args){
// SIMULATED BYTE[] CONTAINS "ABC" PLUS CHAR(0) UNTIL FILL 16 BYTES
byte[] name = new byte[16];
for(int i=0; i<16; i++) {
name[i] = 0;
}
name[0] = 'A';
name[1] = 'B';
name[2] = 'C';
// DESIRED OUTPUT IS A STRING = "ABC".
// I.E. REMOVAL OF PADDING WITH CHAR(0)s
String nameStr = new String(name, StandardCharsets.US_ASCII);
System.out.println("#"+nameStr+"#");
System.out.println(nameStr.length());
}
}
Run Code Online (Sandbox Code Playgroud)
这是输出:
所需的检索长度是 3,而不是 16。还可以在 NetBeans 输出中看到字符串如何包含填充 0 值。
我在 FreeBSD 和 NetBeans 11 下使用 OpenJDK8。
直接的方法是识别尾随零并为String构造函数指定一个范围:
int end = name.length;
while(end > 0 && name[end - 1] == 0) end--;
String nameStr = new String(name, 0, end, StandardCharsets.US_ASCII);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
295 次 |
| 最近记录: |