目录
1、StringBuilder转换(自带reverse方法)
3、ArrayList转换(Collections.reverse)
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
加以整理