从char数组转换字符串时,忽略尾随NULL字符

时间:2019-05-20 19:34:54

标签: java arrays string

我正在使用JNI API(我无法更改),该API返回表示字符串的固定大小的char数组。

我正在使用String.valueOf(char [])

将其转换为String

问题是我可以收到像{'a','b','c','\0','\0','\0'}

这样的数组

使用valueOf()保留结尾的NULL,并且我得到了错误的字符串。

有没有简单的方法可以将此类和数组转换为字符串并删除NULL?

3 个答案:

答案 0 :(得分:3)

String s = String.valueOf(bits).trim();

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

答案 1 :(得分:2)

通常,您将同时获得一个数组和一个length变量,该变量指示要从该数组读取多少个字符。如果您没有length变量,则可以使用循环找到它,并使用new String(char[], int, int)构造函数:

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

答案 2 :(得分:-1)

我这样做是这样的:由于空值仅位于charArray的末尾,因此我向后遍历了数组,并计算了它具有多少个空值。然后,我使用数组的长度减去null数作为for next循环的上限遍历数组,并构建了没有尾随null的最终字符串。

赞:

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();
}