1 回答

TA贡献1775条经验 获得超11个赞
您可以使用 achar[]
比使用 a 更快地执行此操作,StringBuilder
因为:
a
StringBuilder
只是 a 的包装器char[]
,所以它不可能更快。间接意味着它会更慢。您确切地知道结果将持续多长时间,因此您可以分配
char[]
您需要的最小尺寸。使用 aStringBuilder
,您可以预先确定它的大小,但是使用两个StringBuilder
s 则不能完全确定大小,因此您要么必须过度分配长度(例如,使两者的长度都与 相同chars
),要么依靠StringBuilder
内部调整自身大小(这会更慢比不;它使用更多的内存)。
我的想法是使用两个整数指针指向您将在字符串中写入 char 的下一个位置:一个从数组的开头开始,另一个从末尾开始;当您通过输入进行操作时,两个指针将靠得更近。
处理完整个输入后,结果数组中与“结束指针”对应的部分将向后,因此将其反转。
你可以这样做:
char[] newChars = new char[chars.length];
int left = 0;
int right = chars.length;
for (char c : chars) {
if (c == '!') {
newChars[left++] = c;
} else {
newChars[--right] = c;
}
}
// Reverse the "otherSymbols".
for (int i = right, j = newChars.length - 1; i < j; ++i, --j) {
char tmp = newChars[i];
newChars[i] = newChars[j];
newChars[j] = tmp;
}
return new String(newChars);
添加回答
举报