1.将字符串逆转的方法
public static String reverse1(String s) {// 利用截取子字符串递归反转
int length = s.length();
if (length <= 1) {
return s;
}
String left = s.substring(0, length / 2);
String right = s.substring(length / 2, length);
return reverse1(right) + reverse1(left);
}
public static String reverse2(String str) {// 2 3获取各个索引字符值进行逆转相加
int length = str.length();
String reverstr = "";
for (int i = length - 1; i >= 0; i--) {
reverstr += str.charAt(i);// 相当reverse = reverse+ s.charAt(i)
// ;这就是2和3的区别顺序的关系
}
return reverstr;
}
public static String reverse3(String s) {
int length = s.length();
String reverse = "";
for (int i = 0; i < length; i++)
reverse = s.charAt(i) + reverse;
return reverse;
}
public static String reverse4(String str) {// 先转换为字符数组,然后再逆转相加
char[] arr = str.toCharArray();
String reverse = "";
for (int i = arr.length - 1; i >= 0; i--)
reverse += arr[i];
return reverse;
}
public static StringBuffer reverse5(String str) {
return new StringBuffer(str).reverse();
}
public static String reverse6(String str) {
char[] s = str.toCharArray();
int n = s.length - 1;
int mid = n / 2;
for (int i = 0; i <= mid; i++) {
char temp = s[i];
s[i] = s[n - i];
s[n - i] = temp;
}
return new String(s);
}
public static String reverse7(String str) {
//此处的理解:按位异或运算是指两个相应的二进制相同时结果为0,否则为1.
//这里相当与交换两个变量的值,而又不借助其他的中间变量.
//(1)一个变量按位异或自己的结果为0,
//(2)一个变量按位异或0的结果为自己
char[] s = str.toCharArray();
int begin = 0;
int end = s.length - 1;
while (begin < end) {
s[begin] = (char) (s[begin] ^ s[end]);//(1)
s[end] = (char) (s[begin] ^ s[end]);//(2)
s[begin] = (char) (s[end] ^ s[begin]);//(3)
//在上面的三条语句中,语句1可以看做把变量a(s[begin])、b(s[end])保存到a的存储空间中(当然这只是一种理解方式);
//语句2消去了b(原理1),于是剩下了a(原理2),赋值到b的存储空间,此刻,b变量已经得到了a的值;
//语句3中,原本a变量存储空间内已经同时保存了a、b,此刻,b已经变成了a,
//所以两个按位异或后,便消去了a(原理1),只剩下了b(原理2),将它赋值给a,至此,交换变量的过程结束
begin++;
end--;
}
return new String(s);
}
public static String reverse8(String str) {
char[] s = str.toCharArray();
Stack<Character> stack = new Stack<Character>();
for (int i = 0; i <= s.length - 1; i++) {
stack.push(s[i]);
}
String reverstr = "";
for (int i = 0; i <= s.length - 1; i++) {
reverstr += stack.pop();
}
return reverstr;
}
2.判断回文
public static void palindrome2(String str) {// 用JDK的StringBuffer(线程安全) or
// StringBuilder(线程不安全)类方式
// String temp = new StringBuffer(str).reverse().toString();
String temp = new StringBuilder(str).reverse().toString();
if (str.equals(temp)) {
System.out.println("Yes, It is palindrome.");
} else {
System.out.println("No,It is not palindrome.");
}
}
public static void palindrome3(String str)// 通过比较两端字符
{
int i = str.length();
int j = 0;
while (j <= (i / 2) - 1 && str.charAt(j) == str.charAt(i - j - 1))
j++;
if (j == i / 2)
System.out.println("Yes,It is palindrome.");
else
System.out.println("No,It is not palindrome.");
}
备注:部分来自
http://blog.csdn.net/blog_lee/article/details/44171833