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