如何在 Java 中删除填充字符从字节数组转换为字符串?

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。

Hol*_*ger 5

直接的方法是识别尾随零并为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)

  • @sc0der没有要求在开始时删除零字节,事实上,这与OP的意图相矛盾。显然,他们正在解析一种文件格式,该文件格式在固定大小字段的末尾具有零字节填充。这并不是一个不寻常的要求。 (2认同)

归档时间:

查看次数:

295 次

最近记录:

5 年,11 月 前