疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

5中方式实现String反转


 

   

  这里介绍Java中5中实现String反转的方式。

  一、数组实现String反转

  复制代码

  //数组实现String反转

  public String reverseByArray(){

  if(str == null || str.length() == 1){

  return null;

  }

  char[] ch = str.toCharArray();//字符串转换成字符数组

  for(int i = 0 ; i < ch.length/2 ; i++){

  char temp = ch[i];

  ch[i] = ch[ch.length-i-1];

  ch[ch.length-i-1] = temp;

  }

  return new String(ch);

  }

  复制代码

  二、栈实现String反转

  复制代码

  //用栈实现String反转

  public String reverseByStack(){

  if(str == null || str.length() == 1){

  return null;

  }

  Stack stack = new Stack();

  char[] ch = str.toCharArray();//字符串转换成字符数组

  for (char c : ch) {

  stack.push(c);//每个字符,推进栈

  }

  for (int i = 0; i < ch.length; i++) {

  ch[i] = stack.pop();//移除这个堆栈的顶部对象

  }

  return new String(ch);

  }

  复制代码

  三、逆序遍历实现String反转

  复制代码

  //用逆序遍历实现String反转

  public String reverseBySort(){

  if(str == null || str.length() == 1){

  return null;

  }

  StringBuffer sb = new StringBuffer();

  for (int i = str.length() -1 ; i >= 0; i--) {

  sb.append(str.charAt(i));//使用StringBuffer从右往左拼接字符

  }

  return sb.toString();

  }

  复制代码

  四、位运算实现String反转

  复制代码

  //使用位运算实现String反转

  public String reverseByBit() {

  if(str == null || str.length() == 1){

  return null;

  }

  char[] ch = str.toCharArray();//字符串转换成字符数组

  int len = str.length();

  for(int i= 0; i< len/ 2; i++) {

  ch[i]^= ch[len- 1- i];

  ch[len- 1- i]^= ch[i];

  ch[i]^= ch[len- 1- i];

  }

  return new String(ch);

  }

  复制代码

  五、递归实现String反转

  复制代码

  //使用递归实现String反转

  public String reverseByRecursive(String str){

  if(str == null || str.length() == 0){

  return null;

  }

  if(str.length() == 1){

  return str;

  } else {

  //从下标为1开始截取字符串,在返回下标为0的字符

  return reverseByRecursive(str.substring(1)) + str.charAt(0);

  }

  }

  复制代码

  六、测试

  复制代码

  public class Test {

  public static void main(String[] args) {

  String s = "123456";

  Reverse r = new Reverse(s);

  System.out.println(r.reverseByArray());

  System.out.println(r.reverseByStack());

  System.out.println(r.reverseBySort());

  System.out.println(r.reverseByBit());

  System.out.println(r.reverseByRecursive(s));

  }

  }

  复制代码

  七、结果

  654321

  654321

  654321

  654321

  654321

  八、用于String反转的全部代码

  复制代码

  public class Reverse {

  private String str = null;

  public Reverse(String str){

  this.str = str;

  }

  //数组实现String反转

  public String reverseByArray(){

  if(str == null || str.length() == 1){

  return null;

  }

  char[] ch = str.toCharArray();//字符串转换成字符数组

  for(int i = 0 ; i < ch.length/2 ; i++){

  char temp = ch[i];

  ch[i] = ch[ch.length-i-1];

  ch[ch.length-i-1] = temp;

  }

  return new String(ch);

  }

  //用栈实现String反转

  public String reverseByStack(){

  if(str == null || str.length() == 1){

  return null;

  }

  Stack stack = new Stack();

  char[] ch = str.toCharArray();//字符串转换成字符数组

  for (char c : ch) {

  stack.push(c);//每个字符,推进栈

  }

  for (int i = 0; i < ch.length; i++) {

  ch[i] = stack.pop();//移除这个堆栈的顶部对象

  }

  return new String(ch);

  }

  //用逆序遍历实现String反转

  public String reverseBySort(){

  if(str == null || str.length() == 1){

  return null;

  }

  StringBuffer sb = new StringBuffer();

  for (int i = str.length() -1 ; i >= 0; i--) {

  sb.append(str.charAt(i));//使用StringBuffer从右往左拼接字符

  }

  return sb.toString();

  }

  //使用位运算实现String反转

  public String reverseByBit() {

  if(str == null || str.length() == 1){

  return null;

  }

  char[] ch = str.toCharArray();//字符串转换成字符数组

  int len = str.length();

  for(int i= 0; i< len/ 2; i++) {

  ch[i]^= ch[len- 1- i];

  ch[len- 1- i]^= ch[i];

  ch[i]^= ch[len- 1- i];

  }

  return new String(ch);

  }

  //使用递归实现String反转

  public String reverseByRecursive(String str){

  if(str == null || str.length() == 0){

  return null;

  }

  if(str.length() == 1){

  return str;

  } else {

  //从下标为1开始截取字符串,在返回下标为0的字符

  return reverseByRecursive(str.substring(1)) + str.charAt(0);

  }

  }

  }

  复制代码