Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中从字节数组转换为字符串来删除填充字符?_Java_Arrays_String - Fatal编程技术网

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

如何在Java中从字节数组转换为字符串来删除填充字符?,java,arrays,string,Java,Arrays,String,我有一个字节数组,其中包含填充值为0的文本,最多填充16个字节 当我试图将其转换为字符串时,我无法获得正确的长度/字符串,它总是检索整个16个字符 我试过: 导入java.nio.charset.StandardCharset; 公共类HelloWorld{ 公共静态void main(字符串[]args){ //模拟字节[]包含“ABC”加字符(0),直到填充16个字节 字节[]名称=新字节[16]; 对于(int i=0;i 更新字符串并删除不需要的字符 String nameStr = n

我有一个字节数组,其中包含填充值为0的文本,最多填充16个字节

当我试图将其转换为字符串时,我无法获得正确的长度/字符串,它总是检索整个16个字符

我试过:

导入java.nio.charset.StandardCharset;
公共类HelloWorld{
公共静态void main(字符串[]args){
//模拟字节[]包含“ABC”加字符(0),直到填充16个字节
字节[]名称=新字节[16];
对于(int i=0;i

更新字符串并删除不需要的字符

String nameStr = new String(name, StandardCharsets.US_ASCII).replaceAll("\0", "");
,输出

#ABC#
你可以用绳子

String nameStr = new String(name, StandardCharsets.US_ASCII).trim();

System.out.println("#" + nameStr + "#");
System.out.println(nameStr.length());
输出

#ABC#
3

直截了当的方法是识别尾随零并指定
字符串的范围
构造函数:

int end = name.length;
while(end > 0 && name[end - 1] == 0) end--;
String nameStr = new String(name, 0, end, StandardCharsets.US_ASCII);

为什么不使用
replaceAll
?另外,我认为for循环是不必要的,因为字节数组最初无论如何都会包含零。字节[]是从文件中读取的,这是一个简化的示例,允许发布一个可复制的示例。我打算做的是读取一个变量字符串(最多16个字符)但我总是读取16个字符,甚至是存储在未使用字节[]中的“0”值位置。这看起来像。为什么首先要通过字节数组构建字符串?如果要从文件中读取文本,则不要将其作为字节读取。请使用适当的读取器或扫描仪为您处理将字节转换为字符的过程。注意-如果数组中的第一个
0
之后有符号,这将不起作用,这可能不是big这一特定的交易question@IłyaBursov这也是一项繁重的操作,考虑到它将在幕后使用正则表达式模式匹配引擎。我认为正则表达式对于我的具体情况来说可能是杀伤力过大,下面建议使用trim更容易。无论如何,很高兴知道。再见,算法方法是正确的。试试这些
name[1] ='A';
名称[2]='B';
名称[9]='C';@sc0der在开始时没有删除零字节的要求,事实上,这与OP的意图相矛盾。他们显然在解析一种文件格式,该格式在固定大小的字段末尾有零字节填充。这不是一个不寻常的要求。我已将建议使用trim的解决方案标记为解决方案。但是这一个可能是完全有效的解决方案。我想,如果你必须重复多次这个操作,那么使用这个操作会更有意义。我只是觉得对于我的特定大小写来说,trim更易于阅读和使用。这不仅删除了零填充字节,也删除了开头的空格字符。这个选项可能是simplest。由于该操作仅在读取开始时发生一次,因此我不在乎这在计算上是否比建议标识0并在字符串构造函数中指定长度的操作更昂贵。在我的特定情况下,根本没有空格。