`
Josh_Persistence
  • 浏览: 1653617 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类

Java实现字符串反转的8种或9种方法

阅读更多

注:对于第7种使用异或的方式来实现字符串的反转,如果不太看得明白的,可以参照另一篇博客:

http://josh-persistence.iteye.com/blog/2205768

 

/**
 * 
 */
package com.wsheng.aggregator.algorithm.string;

import java.util.Stack;

/**
 * 8 种字符串反转的方法, 其实可以是9种方法,第9种是使用StringBuffer和StringBuilder中实现的方法
 * @author Josh Wang(Sheng)
 * 
 * @email  swang6@ebay.com
 * 
 */
public class StringReverse {

	/**
	 * 二分递归地将后面的字符和前面的字符连接起来。
	 * 
	 * @param s
	 * @return
	 */
	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);
	}
	
	/**
	 * 取得当前字符并和之前的字符append起来
	 * @param s
	 * @return
	 */
	public static String reverse2(String s) {
		int length = s.length();
		String reverse = "";
		for (int i=0; i<length; i++)
			reverse = s.charAt(i) + reverse;
		return reverse;
	}
	
	/**
	 * 将字符从后往前的append起来
	 * @param s
	 * @return
	 */
	public static String reverse3(String s) {
		char[] array = s.toCharArray();
		String reverse = "";
		for (int i = array.length - 1; i >= 0; i--) {
			reverse += array[i];
		}
		return reverse;
	}
	
	/**
	 * 和StringBuffer()一样,都用了Java自实现的方法,使用位移来实现
	 * @param s
	 * @return
	 */
	public static String reverse4(String s) {
		return new StringBuilder(s).reverse().toString();
	}
	
	/**
	 * 和StringBuilder()一样,都用了Java自实现的方法,使用位移来实现
	 * @param s
	 * @return
	 */
	public static String reverse5(String s) {
		return new StringBuffer(s).reverse().toString();
	}
	
	/**
	 * 二分交换,将后面的字符和前面对应的那个字符交换
	 * @param s
	 * @return
	 */
	public static String reverse6(String s) {
		char[] array = s.toCharArray();
		int end = s.length() - 1;
		int halfLength = end / 2;
		for (int i = 0; i <= halfLength; i++) {
			char temp = array[i];
			array[i] = array[end-i];
			array[end-i] = temp;
		}
		
		return new String(array);
	}
	
	/**
	 * 原理是使用异或交换字符串
	 * a=a^b; 
	 * b=b^a; 
         * a=b^a;
	 * 
	 * @param s
	 * @return
	 */
	public static String reverse7(String s) {
		char[] array = s.toCharArray();
		  
		  int begin = 0;
		  int end = s.length() - 1;
		  
		  while (begin < end) {
			   array[begin] = (char) (array[begin] ^ array[end]);
			   array[end] = (char) (array[end] ^ array[begin]);
			   array[begin] = (char) (array[end] ^ array[begin]);
			   begin++;
			   end--;
		  }
		  
		  return new String(array);
	}
	
	/**
	 * 基于栈先进后出的原理
	 * 
	 * @param s
	 * @return
	 */
	public static String reverse8(String s) {
		char[] array = s.toCharArray();
		Stack<Character> stack = new Stack<Character>();
		for (int i = 0; i < array.length; i++)
			stack.push(array[i]);

		String reverse = "";
		for (int i = 0; i < array.length; i++)
			reverse += stack.pop();
		  
		return reverse;
	}
	
	public static void main(String[] args) {
		System.out.println(reverse1("Wang Sheng"));
		System.out.println(reverse2("Wang Sheng"));
		System.out.println(reverse3("Wang Sheng"));
		System.out.println(reverse4("Wang Sheng"));
		System.out.println(reverse5("Wang Sheng"));
		System.out.println(reverse6("Wang Sheng"));
		System.out.println(reverse7("Wang Sheng"));
		System.out.println(reverse8("Wang Sheng"));
	}
}

 

2
2
分享到:
评论
2 楼 freezingsky 2015-04-24  
除了异或那个还有点意思。其他的,不知道说啥好!
1 楼 一个java程序员 2015-04-24  
  

突然想到了茴香豆的茴字有几种写法。

相关推荐

    java 用递归实现字符串反转

    ### Java使用递归实现字符串反转 在Java编程语言中,递归是一种常用的方法来解决许多问题,特别是那些可以通过分解成更小子问题来解决的问题。本文将详细介绍如何使用递归来实现字符串的反转。 #### 一、递归基础...

    java递归字符串反转

    网上绝大部分java递归实现字符串反转缺少字符串判空条件,我加了上去。

    使用几种常见的方法实现字符串反转

    ### 使用几种常见的方法实现字符串反转 #### 知识点一:使用`BufferedReader`实现字符串反转 在Java中,可以通过`BufferedReader`类从字符流中读取文本,并利用循环来实现字符串的反转。 1. **引入必要的包**: ...

    java将字符串反转几种方法总结.rar

    这篇总结主要探讨了多种在Java中实现字符串反转的方法,适合初学者学习和理解。下面,我们将详细解析这些方法。 1. **StringBuilder或StringBuffer的reverse()方法** `StringBuilder`和`StringBuffer`类提供了内置...

    将输入的字符串反转 java

    本文将深入探讨如何在Java中实现字符串反转,并提供一个具体的示例来解释这一过程。 首先,我们要理解Java中的字符串是不可变对象,这意味着一旦创建了字符串对象,就不能更改它的值。因此,反转字符串通常涉及创建...

    java实现字符串反转

    "java实现字符串反转" Java 实现字符串反转是指将一个字符串的字符顺序颠倒过来,例如将字符串 "hello" 反转成 "olleh"。本文将为大家详细介绍 Java 实现字符串反转的多种方法,包括使用内置类、左到右拼接字符串、...

    java 字符串反转

    在本篇中,我们将深入探讨如何在Java中实现字符串反转,特别是在处理多个字符串时。 首先,让我们从基本的字符串反转方法开始。Java提供了`StringBuilder`或`StringBuffer`类,它们是可变的字符序列,非常适合进行...

    将字符串反转

    字符串反转的方法有很多种,这里我们将探讨几种常见的编程语言中实现这一操作的方式。 1. **Python**: 在Python中,字符串是不可变对象,这意味着我们不能直接修改已存在的字符串。不过,我们可以利用切片...

    Java 实例 - 压栈出栈的方法实现字符串反转源代码-详细教程.zip

    本教程的详细资源包含在名为“Java实例 - 压栈出栈的方法实现字符串反转源代码-详细教程.rar”的压缩包中,涵盖了完整的Java源代码示例和详细的解释,非常适合初学者和有经验的开发者参考学习。通过学习这个实例,你...

    java实现字符串反转案例

    总的来说,这两种方法都可以实现字符串反转,但改进版使用`StringBuilder`更高效,因为它避免了不必要的字符串对象创建。在实际开发中,尤其是在处理大数据量或性能敏感的场景下,应优先考虑使用`StringBuilder`。...

    Java实现的简单字符串反转操作示例

    除了使用Java程序实现字符串反转操作外,还有许多在线工具可以实现字符串反转操作,例如在线文本倒序翻转排序工具。该工具可以在线将文本倒序翻转,非常方便。 Java字符串操作技巧总结 Java中的字符串操作技巧非常...

    《编程珠玑》中的最优性能效率最高字符串反转算法

    总的来说,《编程珠玑》中的最优性能效率最高字符串反转算法通过双指针法实现了原地反转,避免了额外的存储需求,提高了运行效率。这种算法设计思路不仅适用于字符串反转,还可以推广到其他需要高效交换元素的问题中...

    JAVA字符串反转的三种方法

    本文将详细介绍三种在Java中实现字符串反转的方法。 方法一:使用StringBuilder类 StringBuilder是Java中的一个类,它提供了动态构建字符串的能力,支持字符串的修改。因此,反转字符串的一个有效方法是通过...

    Java 字符串反转实现代码

    Java 字符串反转实现代码 Java 字符串反转实现...我们可以使用 swap 方法或 JDK 提供的方法来实现字符串反转。通过学习和了解字符串反转的实现原理和方法,我们可以更好地掌握 Java 编程语言,并应用于实际开发中。

    Java 实例 - 字符串反转源代码-详细教程.zip

    本教程将深入探讨如何在Java中实现字符串反转,包括基础方法和一些高级技巧。我们将通过源代码实例来详细讲解,以帮助你更好地理解和应用这些知识。 首先,Java中的字符串是不可变对象,这意味着一旦创建了一个字符...

    (Java)反转字符串单词,但不改变标点符号的位置

    Stack是一种后进先出的数据结构,非常适合处理字符串反转的操作。在上面的代码中,我们使用了Java的Stack类来实现反转字符串单词的操作。 首先,我们定义了一个String类型的变量s,并将其初始化为"Hello, I need an...

    面试题今天(字符串反转)

    以上几种方法都可以用来实现字符串的反转,但每种方法都有其特点和适用场景: - **方法一**:适用于简单快速的反转需求,且易于理解。 - **方法二**:虽然代码实现相对复杂,但在某些特定场景下可能更为合适,例如当...

    java字符反转代码

    - **字符串反转**:通过 `StringBuffer` 的 `append()` 方法将字符逐个加入,并且是从字符串的末尾向前遍历,最终得到反转后的字符串。 ### 五、总结 此Java程序通过使用Swing组件实现了字符反转功能,并且具备简单...

    java实现字符串逆序输出

    有两种主要方法可以实现字符串的逆序: 1. **使用`StringBuilder`或`StringBuffer`类**:这两个类提供了一些方便的方法来操作字符串,包括`reverse()`方法,可以直接用来反转字符串。以下是使用`StringBuilder`的...

    字符串反转函数

    接下来,我们来看如何用堆栈实现字符串反转。假设我们有一个字符串`str`,我们可以初始化一个空的堆栈`stack`,然后遍历字符串中的每个字符: 1. 对于每一个字符,将其压入堆栈`stack`。 2. 遍历完成后,堆栈`stack...

Global site tag (gtag.js) - Google Analytics