Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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,我正在使用一个JNIAPI(我无法更改),它返回一个表示字符串的固定大小的字符数组 我正在使用String.valueOf(char[])将其转换为String 问题是我可以接收这样的数组{'a'、'b'、'c'、'\0'、'\0'、'\0'} 使用valueOf()将保留尾随的null和a,这样我就得到了一个错误的字符串 有没有一种简单的方法可以将这样的and数组转换为字符串并删除空值?通常,您会得到一个数组和一个长度变量,该变量告诉您要从数组中读取多少个字符。如果您没有length变量,可以

我正在使用一个JNIAPI(我无法更改),它返回一个表示字符串的固定大小的字符数组

我正在使用
String.valueOf(char[])将其转换为String

问题是我可以接收这样的数组
{'a'、'b'、'c'、'\0'、'\0'、'\0'}

使用
valueOf()
将保留尾随的null和a,这样我就得到了一个错误的字符串


有没有一种简单的方法可以将这样的and数组转换为字符串并删除空值?

通常,您会得到一个数组和一个
长度
变量,该变量告诉您要从数组中读取多少个字符。如果您没有
length
变量,可以通过循环找到它并使用构造函数:

char[] arr = {'a','b','c','\0','\0','\0'};
int len = 0;
do {
  len++;
} while (arr.length > len && arr[len] != '\0');
String s = new String(arr, 0 ,len);
System.out.println(s); // abc

只需修剪字符串,它将消除所有*前导和*尾随空格。

我是这样做的:因为空值仅位于字符数组的末尾,所以我向后遍历了数组并计算了它有多少空值。然后,我在for next循环中使用数组的长度减去空值的数量作为上限来迭代数组,并构建了最后一个不带尾随空值的字符串

像这样:

public String getStringFromBufferedCharArray(char[] cArray) {
    StringBuilder finalString = new StringBuilder();
    int count = 0;
    for (int x = cArray.length - 1; x >= 0; x--) {
        if ((int) cArray[x] == 0) count++;
        else break;
    }

    int end = cArray.length - count;

    for (int x = 0; x < end; x++) {
        finalString.append(cArray[x]);
    }
    return finalString.toString();
}
公共字符串getStringFromBufferedCharray(char[]cArray){
StringBuilder finalString=新的StringBuilder();
整数计数=0;
对于(int x=cArray.length-1;x>=0;x--){
如果((int)cArray[x]==0)计数++;
否则就断了;
}
int end=cArray.length-计数;
对于(int x=0;x
您假设它不能以
\0
开头。中间不会有。你也假设至少有一个尾随
\0
。thx,但我要求的是一个我不知道的技巧,比如@mavriksc。你的回答是:如果你也可以修剪前导空格,那就保持前导空格的良好状态。这就是我所要求的这种技巧@审稿人shmosel;)这对未来的读者来说没关系:
String.trim()
删除所有等于或低于空格的前导字符和尾随字符(
这些不是尾随零。这些是。我更正了问题的标题和正文。
public String getStringFromBufferedCharArray(char[] cArray) {
    StringBuilder finalString = new StringBuilder();
    int count = 0;
    for (int x = cArray.length - 1; x >= 0; x--) {
        if ((int) cArray[x] == 0) count++;
        else break;
    }

    int end = cArray.length - count;

    for (int x = 0; x < end; x++) {
        finalString.append(cArray[x]);
    }
    return finalString.toString();
}