java实现对输入的一个字符串反转(9种方法)
程序员文章站
2023-12-21 16:07:34
...
方法一:利用JDK中StringBuilder自带的reverse()方法实现反转
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);
}
}
方法二:将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);
}
}
方法三:将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); //反转
/* 遍历 s[i]也可以
for(int i=0;i<s.length;i++) {
System.out.print(s[i]+"");
}*/
//法一:普通for循环,以下是遍历l
for(String j:l) {
System.out.print(j+"");
}
System.out.println();
//法二:迭代器遍历
Iterator <String> iterator=l.iterator();
while(iterator.hasNext()) {
System.out.print(iterator.next()); //有记录/值返回true,并把记录内容存入到对象
}
}
}
方法四:利用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;
}
}
方法五:利用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);
}
}
方法六:利用堆栈实现反转
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]);
}
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);
}
}
方法七:利用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);
}
}
方法八:利用substring()方法和递推关系实现反转
import java.util.Scanner;
public class Main9 {
public static String reverse(String str1) {
if (str1 == null || str1.equals(""))
return str1;
//3+(0,1)、2+(0,2)、1+(0,1)、0+(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);
}
}
方法九:利用递归关系实现反转(先写reverse的空方法,再重写reverse的方法调用该空方法)
import java.util.Scanner;
public class B_204 {
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);
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
加以整理