字符串倒序有不少方法,常见的几种如下:
- 将字符串转化为字符数组,然后倒序输出;
- 递归调用 String 类的 subString() 方法;
- 借用 StringBuffer 类封装的 reverse() 方法;
- 。。。等其他方法。
不过这次要用 “异或” 计算来实现字符串的倒序。
首先需要了解一下 “异或” 运算:相同为 “0”,相异为 “1”。
- 有这样几个需要用到的运算规则:
- a ⊕ a = 0;
- a ⊕ 0 = a;
- a ⊕ b = b ⊕ a;
- a ⊕ b ⊕ c = a ⊕ (b ⊕ c) = (a ⊕ b) ⊕ c
设有两个字符a、b,则有如下的推导过程:
c = a ⊕ b;d = a ⊕ c = a ⊕ (a ⊕ b) = b;e = b ⊕ c = b ⊕ (a ⊕ b) = a;令 a = d;b = e,两个字符交换成功。
public String reverse(String str) {
char[] temp = str.toCharArray();
int begin = 0;
int end = str.length() - 1;
while (begin < end) {
temp[begin] = (char) (temp[begin] ^ temp[end]);
temp[end] = (char) (temp[end] ^ temp[begin]);
temp[begin] = (char) (temp[end] ^ temp[begin]);
begin++;
end--;
}
return new String(temp);
}