1.調用reverse() 方法實現翻轉
public static String reversel1(String str){
return new StringBuffer(str).reverse().toString();
}
通過new一個新的 StringBuffer 調用自帶方法
2.通過字符串數組實現從尾部開始逐個逆序放入字符串中
public static String reverse2(String s)
{
char[] array = s.toCharArray(); //String轉字符數組
StringBuilder reverse = new StringBuilder(); // 使用StringBuilder,更快。
for (int i = array.length - 1; i >= 0; i--){
reverse.append(array[i]);
}
return reverse.toString();
}
3.通過字符串數組實現從頭部開始逐個正序放入字符串中
public static String reverse3(String s)
{
int length = s.length();
String reverse = ""; //注意這是空串,不是null
for (int i = 0; i < length; i++){
reverse = s.charAt(i) + reverse;//在字符串前面連接, 而非常見的後面
//即String="reverse",
// 放入時會"e";"s";"r";"e";"v";"e";"r";的放入String。charAt(i++)
//從尾到頭正序放入
}
return reverse;
}
4.C語言中常用的方法:
public static String reverse5(String orig)
{
char[] s = orig.toCharArray();
int n = s.length - 1;
int halfLength = n / 2;
for (int i = 0; i <= halfLength; i++) {
char temp = s[i];
s[i] = s[n - i];
s[n - i] = temp;
}
return new String(s); //知道 char數組和String相互轉化
}
5.利用棧的先入後出的特性實現字符串的逆轉
public static String reverse5(String string) {
StringBuilder sb = new StringBuilder();
Stack<Character> s = new Stack<Character>();
for (int i = 0; i < string.length(); i++) {
s.add(string.charAt(i));
}
for (int i = 0; i < string.length(); i++) {
sb.append(s.pop());
}
return sb.toString();
}
6.通過二位進制的右移,也就是/2,實現。與方法4異曲同工
public static String reverse6(String string) {
StringBuffer sb = new StringBuffer(string);
for (int i = 0, j = sb.length() - 1; i < sb.length() >>> 1; i++, j--) {
char temp = sb.charAt(i);
sb.setCharAt(i, sb.charAt(j));
sb.setCharAt(j, temp);
}
return sb.toString();
}
所有翻轉的源碼
import java.util.Scanner;
import java.util.Stack;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
String str = sc.nextLine();
// 逆序翻轉
System.out.println(reverse1(str));
}
}
public static String reverse1(String str) {
return new StringBuffer(str).reverse().toString();
}
public static String reverse2(String s) {
char[] array = s.toCharArray(); // String轉字符數組
String reverse = ""; // 注意這是空串,不是null
for (int i = array.length - 1; i >= 0; i--) {
reverse += array[i];
// 即String="reverse",
// 放入時會"r";"e";"v";"e";"r";"s";"e";的放入String.charAt(String.charAt(length--))
}
return reverse;
}
public static String reverse3(String s) {
int length = s.length();
String reverse = ""; // 注意這是空串,不是null
for (int i = 0; i < length; i++) {
reverse = s.charAt(i) + reverse;// 在字符串前面連接, 而非常見的後面
// 即String="reverse",
// 放入時會"e";"s";"r";"e";"v";"e";"r";的放入String。charAt(i++)
// 從尾到頭正序放入
}
return reverse;
}
public static String reverse4(String orig) {
char[] s = orig.toCharArray();
int n = s.length - 1;
int halfLength = n / 2;
for (int i = 0; i <= halfLength; i++) {
char temp = s[i];
s[i] = s[n - i];
s[n - i] = temp;
}
return new String(s); // 知道 char數組和String相互轉化
}
public static String reverse5(String string) {
StringBuffer sb = new StringBuffer();
Stack<Character> s = new Stack<Character>(); // new一個棧
for (int i = 0; i < string.length(); i++) {
s.add(string.charAt(i));
// 往棧中逐個正序放入字符型string.charAt(i++);
}
for (int i = 0; i < string.length(); i++) {
sb.append(s.pop());
// 棧取出的順序與放入的順序相反,所以實現逆序
// length=string.length();
// 逐個增加string.charAt(length--);
}
return sb.toString();
}
public static String reverse6(String string) {
StringBuffer sb = new StringBuffer(string);
for (int i = 0, j = sb.length() - 1; i < sb.length() >>> 1; i++, j--) {
char temp = sb.charAt(i);
sb.setCharAt(i, sb.charAt(j));
sb.setCharAt(j, temp);
}
return sb.toString();
}
public static String reverse7(String string) {
StringBuffer sb = new StringBuffer();
for (int i = string.length() - 1; i >= 0; i--) {
sb.append(string.charAt(i));
}
return sb.toString();
}
}