java实现对输入的一个字符串反转(9种方法)

目录

 

1、StringBuilder转换(自带reverse方法)

2、toCharArray自写swap方法转换

3、ArrayList转换(Collections.reverse)

4、charAt转换

5、异或转换

6、堆栈转换

7、 getBytes转换

 8、递推转换

9、toCharArray的递归转换


1、StringBuilder转换(自带reverse方法)

 方法一:将String装换为StringBuilder,利用JDK中StringBuilder自带的reverse()方法实现反转,再转回String。

​
import java.util.Scanner;
public class Main3{
  Scanner sc=new Scanner(System.in);
  String str1=sc.nextLine();
  //   StringBuilder str2=new StringBuilder(str1);
  //	str2.reverse().toString();
  String str2=new StringBuilder(str1).reverse().toString();
  System.out.println(str2);
	}
}

​

2、toCharArray自写swap方法转换

方法二:将String利用toCharArray转换为字符数组,交换字符反转(注意边界条件)。

//直接从头开始交换
import java.util.Scanner;
public class Main1 {
	public static void swap(char []a,int begin,int end) {
		while(begin<end) {
			char t=a[begin];
			a[begin]=a[end];
			a[end]=t;
			begin++;
			end--;
		}
	}
	public static void main(String[] args) {
          Scanner sc=new Scanner(System.in);
          String str1=sc.next();
          char [] c1=str1.toCharArray();
          swap(c1,0,c1.length-1);
          System.out.println(c1);
	}
}
//二分法交换
import java.util.Scanner;
public class Main1 {
   public static void swap(char []c1) {
        char c;
        int half=(int)Math.floor(c1.length/2); //奇数个字符时,中间的字符不交换位置,则向下取整
        for(int i=c1.length-1;i>=half;i--) {  //注意是大于等于half
        	c=c1[c1.length-i-1];
        	c1[c1.length-i-1]=c1[i];
        	c1[i]=c;
        }
		return;
}
   public static void main(String[] args) {
         Scanner sc=new Scanner(System.in);
         String str1=sc.next();
         char[] c1=str1.toCharArray();
         //String.valueOf(swap(c1))
         swap(c1);
         System.out.println(c1);  
	    }
}

3、ArrayList转换(Collections.reverse)

方法三:将String转换为ArrayList,用Collections.reverse() 实现反转,可采用2种遍历方法输出。

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
public class Main2 {
     public static void main(String[] args) {
             Scanner sc=new Scanner(System.in);
             String str1=sc.nextLine();
             String[] s=str1.split(""); //将一个字符串分割成各个字符,并存入到一个字符串数组中
             List<String> l=new ArrayList <String>();
             l=Arrays.asList(s);  //以列表形式存储
             Collections.reverse(l);  //反转
             //法一:普通for循环,以下是遍历l
             for(String j:l) {
                 System.out.print(j+"");
             }
             /*	遍历 s[i]也可以
             for(int i=0;i<s.length;i++) {
	          System.out.print(s[i]+"");
             }*/

             System.out.println();
             //法二:迭代器遍历
             Iterator <String> iterator=l.iterator();
             while(iterator.hasNext()) {
                 System.out.print(iterator.next()); //有记录/值返回true,并把记录内容存入到对象
	    }
	}
}

4、charAt转换

方法四:利用for循环和charAt倒序输出每个字符实现反转。

import java.util.Scanner;
public class Main4 {
	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		String str1=sc.nextLine();
		reverse(str1);
	}
	 public static void reverse(String str) { 
	        for (int i = str.length() - 1; i >= 0; i--) {      
	            char c = str.charAt(i);  //截取字符    
	            System.out.print(c);  //将每个字符输出
	        }		
	    } 
}
import java.util.Scanner;
public class Main4 {
	public static void main(String[] args) {
		  Scanner sc=new Scanner(System.in);
		  String str1=sc.nextLine();
		  System.out.println(reverse(str1));
	}
	 public static String reverse(String str) { 
		    String c = new String();  //定义一个空的字符串,不能用null(会输出null)
		    //用String c = "";也可以
		    for (int i = str.length() - 1; i >= 0; i--) {       
		        c+=str.charAt(i);   //将每个字符传入字符串
		    }	
		    return c;	 
	    } 
}

5、异或转换

方法五:利用XOR(异或^)操作符实现反转(注意边界条件)。

import java.util.Scanner;
public class Main5 {
    public static void swap(char []c1) {
        int half=(int)Math.floor(c1.length/2); 
        for(int i=0;i<half;i++) {  //注意是小于half,奇数时中间的字符不用异或 ^
        	c1[i]^=c1[c1.length-i-1];
        	c1[c1.length-i-1]^=c1[i];
        	c1[i]^=c1[c1.length-i-1];
        }
        return;
    }
    public static void main(String[] args) {
        	Scanner sc=new Scanner(System.in);
        	String str1=sc.next();
        	char[] c1=str1.toCharArray();
        	swap(c1);
        	System.out.println(c1); 
    }     
}

6、堆栈转换

 方法六:利用堆栈的push()和pop()实现反转。

import java.util.Scanner;
import java.util.Stack;
public class Main6 {
    public static String reverse(String str1) {
        //判空
        if(str1==null||str1.equals("")) {
        	return str1;
        }
        Stack<Character> st=new Stack<Character>();
        char [] c1 =str1.toCharArray();
        for(int i=0;i<str1.length();i++) {
        	st.push(c1[i]);  //字符Push入栈
        }
        int k=0;
        while(!st.isEmpty()) {
        	c1[k++]=st.pop();
        }
        return String.valueOf(c1);
     // return String.copyValueOf(c1);也可以
    }
	public static void main(String[] args) {
            Scanner sc=new Scanner(System.in);
            String str1=sc.next();
            str1=reverse(str1);
            System.out.println(str1); 
	    }     
}

7、 getBytes转换

方法七:利用Byte数组实现反转

import java.util.Scanner;
public class Main7 {
	public static String reverse(String str1) {
		if (str1 == null || str1.equals(""))
			return str1;
		byte[] by=str1.getBytes();  //getBytes():将一个字符串转化为一个字节数组byte[]的方法
		for(int i=0,h=str1.length()-1;i<h;i++,h--) {
			byte temp=by[i];
			by[i]=by[h];
			by[h]=temp;
		}
		return new String(by);  //将字节数组转换为字符串再返回	
	}
	public static void main(String[] args) {
			Scanner sc=new Scanner(System.in);
			String str1=sc.next();
			str1=reverse(str1);
			System.out.println(str1);
	    }     
}

 8、递推转换

方法八:利用charAt()、subString()方法和递推关系实现反转。

 PS:递推是通过重复某一运算得到结果

import java.util.Scanner;
public class Main9 {
	public static String reverse(String str1) {
		if (str1 == null || str1.equals(""))
			return str1;
		//递归取出字符串末尾的字符:3+substring(0,3)、2+substring(0,2)、1+substring(0,1)、0+substring(0,0)
		return str1.charAt(str1.length()-1)+reverse(str1.substring(0, str1.length()-1));
	}
	public static void main(String[] args) {
			Scanner sc=new Scanner(System.in);
			String str1=sc.next();
			str1=reverse(str1);
			System.out.println(str1);
	    }     
}

9、toCharArray的递归转换

方法九:利用递归关系实现反转(先写reverse的空方法,再重写reverse的方法调用该空方法)。

PS:递归是程序调用自身

import java.util.Scanner;
public class Main10 {
	static int i=0;    //i要定义在reverse外面
	public static void reverse(char []c1,int k) {
		if(k==c1.length)   
			return;
		reverse(c1,k+1);
		if(i<=k) {  //i>k的话又反转成原来的数组
			 char temp = c1[k];
			 c1[k] = c1[i];
			 c1[i++] = temp;  //reverse的i可以不断变化
		}
	}
	public static String reverse(String str1) {
		if (str1 == null || str1.equals(""))
			return str1;
		char [] c1=str1.toCharArray();
		reverse(c1,0);   //调用以上的reverse(c1,k)方法
		return String.valueOf(c1);
	}
	public static void main(String[] args) {
			Scanner sc=new Scanner(System.in);
			String str1=sc.next();
			str1=reverse(str1);  
			System.out.println(str1);
	    }     
}

部分参考

https://www.cnblogs.com/Claire6649/p/6235916.html

http://www.importnew.com/30579.html

加以整理

  • 17
    点赞
  • 81
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值