Java實現字符串反轉的8種9種方法

xf3f 9年前發布 | 2K 次閱讀 Java

/**

  • */ 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")); } } </pre>
      來自:http://josh-persistence.iteye.com/blog/2205772

 本文由用戶 xf3f 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!