问题描述
Java不会像C那样“标记”字符串的结尾。它跟踪长度和值,因此@H_403_1@\0字符串中可以包含零个字符()。如果@H_403_1@String从包含char的char数组创建a@H_403_1@\0,则结果@H_403_1@String将包含这些字符。
还要注意,数组的大小是静态的-无法调整大小,因此您必须自己跟踪“大小”(String构造函数不会从char数组的末尾为您删除不需要的字符)。
考虑使用以下任一方法:
-
阿@H_403_1@StringBuilder如通过克莱德伯德III,或建议
-
@H_403_1@String(char value[], int offset, int count); 您必须以编程方式确定适当的值@H_403_1@offset以及@H_403_1@count将要使用的适当值。也许String方法(例如@H_403_1@replace,@H_403_1@concat)@H_403_1@substring可能会有所帮助。
解决方法
我正在解决一个简单的问题:
在Java中删除字符数组中的某些字符,想法很简单:
static void remove_char(char[] arr,char c){
int r = 0;
for (int i = 0 ; i < arr.length ; i++){
if (arr[i] == c){
r++;
continue;
}
arr[i - r] = arr[i];
}
arr[arr.length - r] = '\0'; // ??
return;
}
我想输入一个ending character
信号,表示当我们想要使用例如生成一个字符串时,不必考虑数组的其余部分new String(arr)
Java中是否有这样的字符?(我想是C
,\0
但我不确定)
例如,当我们调用:
System.out.println(new String(remove_char(new char[] {'s','a','l','m'},'a')))
这将被打印: slm m
虽然我想得到,但我不想使用新的数组slm
来做到这一点in-place