今天发现一段很有趣的代码,这是AbstractStringBuilder 的reverse方法源码,可以按照字符从中心位置进行翻转
public AbstractStringBuilder reverse() {
// 是否含有代理字符
boolean hasSurrogates = false;
// 定义一个变量表示长度减一
int n = count - 1;
// j初始化,长度减2再算数右移一位,可看做 int j = (count - 2)/2
// 偶数长度,遍历一半次数,对调替换
// 奇数长度,遍历一半次数减一,对调替换,中间不动
for (int j = (n-1) >> 1; j >= 0; j--) {
int k = n - j;
char cj = value[j];
char ck = value[k];
value[j] = ck;
value[k] = cj;
if (Character.isSurrogate(cj) ||
Character.isSurrogate(ck)) {
hasSurrogates = true;
}
}
if (hasSurrogates) {
reverseAllValidSurrogatePairs();
}
return this;
}