摘要:
使用Java实现反转字符串的10种方法,例如,把字符串“abcdefg” 反转为 “gfedcba”。具体实现方法如下:
Java实现反转字符串的10种方法
1、使用 + (String连接) 操作符
参考代码1:
package com.gx.demo;
public class Test1 {
public static void main(String[] args) {
reverseWithStringConcat("abcdefg");
}
private static String reverseWithStringConcat(String input) {
String output = new String();
for (int i = (input.length() - 1); i >= 0; i--) {
output += (input.charAt(i));
}
display(input, output);
return output;
}
private static void display(String input, String output) {
System.out.println("输入:" + input);
System.out.println("输出:" + output);
}
}
输出结果:
输入:abcdefg
输出:gfedcba
2、使用 StringBuilder
参考代码2:
package com.gx.demo;
public class Test2 {
public static void main(String[] args) {
reverseWithStringBuilderBuiltinMethod("abcdefg");
}
public static String reverseWithStringBuilderBuiltinMethod(String str) {
StringBuilder builder = new StringBuilder(str);
display(str, builder.reverse().toString());
return builder.reverse().toString();
}
private static void display(String input, String output) {
System.out.println("输入:" + input);
System.out.println("输出:" + output);
}
}
输出结果:
输入:abcdefg
输出:gfedcba
3、使用 String charAt 方法
参考代码3:
package com.gx.demo;
public class Test3 {
public static void main(String[] args) {
reverseWithStringChatAt("abcdefg");
}
public static String reverseWithStringChatAt(String str) {
StringBuilder builder = new StringBuilder();
for (int i = (str.length() - 1); i >= 0; i--) {
builder.append(str.charAt(i));
}
display(str, builder.toString());
return builder.toString();
}
private static void display(String input, String output) {
System.out.println("输入:" + input);
System.out.println("输出:" + output);
}
}
输出结果:
输入:abcdefg
输出:gfedcba
4、通过交换字符反转
参考代码4:
package com.gx.demo;
public class Test4 {
public static void main(String[] args) {
reverseWithSwaps("abcdefg");
}
public static String reverseWithSwaps(String str) {
char[] array = str.toCharArray();
int length = array.length - 1;
int half = (int) Math.floor(array.length / 2);
char c;
for (int i = length; i >= half; i--) {
c = array[length - i];
array[length - i] = array[i];
array[i] = c;
}
display(str, String.valueOf(array));
return String.valueOf(array);
}
private static void display(String input, String output) {
System.out.println("输入:" + input);
System.out.println("输出:" + output);
}
}
输出结果:
输入:abcdefg
输出:gfedcba
5、使用 XOR(^) 操作符反转
参考代码5:
package com.gx.demo;
public class Test5 {
public static void main(String[] args) {
reverseWithXOR("abcdefg");
}
public static String reverseWithXOR(String string) {
char[] array = string.toCharArray();
int length = array.length;
int half = (int) Math.floor(array.length / 2);
for (int i = 0; i < half; i++) {
array[i] ^= array[length - i - 1];
array[length - i - 1] ^= array[i];
array[i] ^= array[length - i - 1];
}
display(string, String.valueOf(array));
return String.valueOf(array);
}
private static void display(String input, String output) {
System.out.println("输入:" + input);
System.out.println("输出:" + output);
}
}
输出结果:
输入:abcdefg
输出:gfedcba
6、使用堆栈
参考代码6:
package com.gx.demo;
import java.util.Stack;
public class Test6 {
public static void main(String[] args) {
String str = "abcdefg";
str = reverse(str);
System.out.println("输出:: " + str);
}
//函数使用堆栈和字符数组来反转Java中的字符串
public static String reverse(String str) {
//基本情况:如果字符串为空或空
if (str == null || str.equals(""))
return str;
//创建一个空的字符堆栈
Stack<Character> stack = new Stack<Character>();
//将给定字符串的每个字符放入堆栈中
char[] ch = str.toCharArray();
for (int i = 0; i < str.length(); i++)
stack.push(ch[i]);
//从索引0开始
int k = 0;
//从堆栈中弹出字符,直到它为空
while (!stack.isEmpty()) {
//将每个弹出的字符分配回字符数组
ch[k++] = stack.pop();
}
//将字符数组转换为字符串并返回
return String.copyValueOf(ch);
}
}
输出结果:
输出:gfedcba
7、使用 Collections reverse() 方法
参考代码7:
package com.gx.demo;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Test7 {
public static void main(String[] args) {
String str = "abcdefg";
str = reverse(str);
System.out.println("输出:: " + str);
}
// 函数使用collections来反转Java中的字符串。
public static String reverse(String str) {
// 基本情况:如果字符串是null或空
if (str == null || str.equals(""))
return str;
// 创建一个空的字符列表
List<Character> list = new ArrayList<Character>();
// 将给定字符串的每个字符都推入其中
for (char c : str.toCharArray())
list.add(c);
// 使用java.util反向列表。集合反向()
Collections.reverse(list);
// 使用StringBuilder将ArrayList转换为String并返回
StringBuilder builder = new StringBuilder(list.size());
for (Character c : list)
builder.append(c);
return builder.toString();
}
}
输出结果:
输出:gfedcba
8、使用 Byte 数组
参考代码8:
package com.gx.demo;
public class Test8 {
public static void main(String[] args) {
String str = "abcdefg";
str = reverse(str);
System.out.println("输出:: " + str);
}
// 函数使用字节数组反转Java中的字符串
public static String reverse(String str) {
// 如果字符串为空或空,则返回
if (str == null || str.equals(""))
return str;
// 将字符串转换为字节
byte[] bytes = str.getBytes();
// 从给定弦的两个端点l和h开始
// 并在循环的每次迭代中增加l和减少h
// 直到两个端点相交(l >= h)
for (int l = 0, h = str.length() - 1; l < h; l++, h--) {
// 交换l和h的值
byte temp = bytes[l];
bytes[l] = bytes[h];
bytes[h] = temp;
}
// 将字节数组转换回字符串
return new String(bytes);
}
}
输出结果:
输出:gfedcba
9、使用 substring() 方法
参考代码9:
package com.gx.demo;
public class Test9 {
public static void main(String[] args) {
String str = "abcdefg";
str = reverse(str);
System.out.println("输出:: " + str);
}
// 函数使用substring来反转Java中的字符串
private static String reverse(String str) {
// 基本情况:如果字符串为空或空
if (str == null || str.equals(""))
return str;
// 最后一个字符+其余字符串的递归
return str.charAt(str.length() - 1) + reverse(str.substring(0, str.length() - 1));
}
}
输出结果:
输出:gfedcba
10、使用递归
参考代码10:
package com.gx.demo;
public class Test10 {
public static void main(String[] args) {
String str = "abcdefg";
str = reverse(str);
System.out.println("输出:: " + str);
}
static int i = 0;
// 使用静态变量在Java中反转字符串的递归函数
private static void reverse(char[] str, int k) {
// 如果我们到了str的末端
if (k == str.length)
return;
// 下一个字符的递归
reverse(str, k + 1);
if (i <= k) {
char temp = str[k];
str[k] = str[i];
str[i++] = temp;
}
}
public static String reverse(String str) {
// 基本情况:如果字符串为空或空
if (str == null || str.equals(""))
return str;
// 将字符串转换为字符数组
char[] A = str.toCharArray();
// 反向字符数组
reverse(A, 0);
// 将字符数组转换为字符串
return String.copyValueOf(A);
}
}
输出结果:
输出:gfedcba