我正在使用JNI API(我无法更改),该API返回表示字符串的固定大小的char数组。
我正在使用String.valueOf(char [])
问题是我可以收到像{'a','b','c','\0','\0','\0'}
使用valueOf()
保留结尾的NULL,并且我得到了错误的字符串。
有没有简单的方法可以将此类和数组转换为字符串并删除NULL?
答案 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();
}