史上最全的10种Java反转字符串方法(附详细源码+演示结果)

摘要:
  使用Java实现反转字符串的10种方法,例如,把字符串“abcdefg” 反转为 “gfedcba”。具体实现方法如下:

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

猜你喜欢

转载自blog.csdn.net/weixin_44563573/article/details/103445478