Java中5種方式實(shí)現(xiàn)String反轉(zhuǎn)
這里介紹Java中5中實(shí)現(xiàn)String反轉(zhuǎn)的方式。
一、數(shù)組實(shí)現(xiàn)String反轉(zhuǎn)
//數(shù)組實(shí)現(xiàn)String反轉(zhuǎn)
public String reverseByArray(){
if(str == null || str.length() == 1){
return null;
}
char[] ch = str.toCharArray();//字符串轉(zhuǎn)換成字符數(shù)組
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);
}
二、棧實(shí)現(xiàn)String反轉(zhuǎn)
//用棧實(shí)現(xiàn)String反轉(zhuǎn)
public String reverseByStack(){
if(str == null || str.length() == 1){
return null;
}
Stack<Character> stack = new Stack<Character>();
char[] ch = str.toCharArray();//字符串轉(zhuǎn)換成字符數(shù)組
for (char c : ch) {
stack.push(c);//每個(gè)字符,推進(jìn)棧
}
for (int i = 0; i < ch.length; i++) {
ch[i] = stack.pop();//移除這個(gè)堆棧的頂部對(duì)象
}
return new String(ch);
}
三、逆序遍歷實(shí)現(xiàn)String反轉(zhuǎn)
//用逆序遍歷實(shí)現(xiàn)String反轉(zhuǎn)
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();
}
四、位運(yùn)算實(shí)現(xiàn)String反轉(zhuǎn)
//使用位運(yùn)算實(shí)現(xiàn)String反轉(zhuǎn)
public String reverseByBit() {
if(str == null || str.length() == 1){
return null;
}
char[] ch = str.toCharArray();//字符串轉(zhuǎn)換成字符數(shù)組
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);
}
五、遞歸實(shí)現(xiàn)String反轉(zhuǎn)
//使用遞歸實(shí)現(xiàn)String反轉(zhuǎn)
public String reverseByRecursive(String str){
if(str == null || str.length() == 0){
return null;
}
if(str.length() == 1){
return str;
} else {
//從下標(biāo)為1開始截取字符串,在返回下標(biāo)為0的字符
return reverseByRecursive(str.substring(1)) + str.charAt(0);
}
}
六、測(cè)試
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));
}
}
七、結(jié)果

八、用于String反轉(zhuǎn)的全部代碼
public class Reverse {
private String str = null;
public Reverse(String str){
this.str = str;
}
//數(shù)組實(shí)現(xiàn)String反轉(zhuǎn)
public String reverseByArray(){
if(str == null || str.length() == 1){
return null;
}
char[] ch = str.toCharArray();//字符串轉(zhuǎn)換成字符數(shù)組
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);
}
//用棧實(shí)現(xiàn)String反轉(zhuǎn)
public String reverseByStack(){
if(str == null || str.length() == 1){
return null;
}
Stack<Character> stack = new Stack<Character>();
char[] ch = str.toCharArray();//字符串轉(zhuǎn)換成字符數(shù)組
for (char c : ch) {
stack.push(c);//每個(gè)字符,推進(jìn)棧
}
for (int i = 0; i < ch.length; i++) {
ch[i] = stack.pop();//移除這個(gè)堆棧的頂部對(duì)象
}
return new String(ch);
}
//用逆序遍歷實(shí)現(xiàn)String反轉(zhuǎn)
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();
}
//使用位運(yùn)算實(shí)現(xiàn)String反轉(zhuǎn)
public String reverseByBit() {
if(str == null || str.length() == 1){
return null;
}
char[] ch = str.toCharArray();//字符串轉(zhuǎn)換成字符數(shù)組
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);
}
//使用遞歸實(shí)現(xiàn)String反轉(zhuǎn)
public String reverseByRecursive(String str){
if(str == null || str.length() == 0){
return null;
}
if(str.length() == 1){
return str;
} else {
//從下標(biāo)為1開始截取字符串,在返回下標(biāo)為0的字符
return reverseByRecursive(str.substring(1)) + str.charAt(0);
}
}
}
以上這篇Java中5種方式實(shí)現(xiàn)String反轉(zhuǎn)就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Springboot定時(shí)任務(wù)Scheduled重復(fù)執(zhí)行操作
這篇文章主要介紹了Springboot定時(shí)任務(wù)Scheduled重復(fù)執(zhí)行操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-09-09
解析SpringSecurity+JWT認(rèn)證流程實(shí)現(xiàn)
這篇文章主要介紹了解析SpringSecurity+JWT認(rèn)證流程實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07
Component和Configuration注解區(qū)別實(shí)例詳解
這篇文章主要為大家介紹了Component和Configuration注解區(qū)別實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11
詳解如何Java中實(shí)現(xiàn)Excel的注釋和批注
注釋及批注是?Excel?中比較常用的功能,這篇文章主要為大家詳細(xì)介紹了如何在Java中實(shí)現(xiàn)Excel的注釋和批注,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-12-12
Spring MVC Interceptor 實(shí)現(xiàn)性能監(jiān)控的功能代碼
本篇文章主要介紹了Spring MVC Interceptor 實(shí)現(xiàn)性能監(jiān)控的功能代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-09-09
Java詳解實(shí)現(xiàn)多線程的四種方式總結(jié)
哈哈!經(jīng)過一個(gè)階段的學(xué)習(xí),Java基礎(chǔ)知識(shí)學(xué)習(xí)終于到多線程了!Java多線程以及后面互斥鎖的概念都是Java基礎(chǔ)學(xué)習(xí)的難點(diǎn),所以我做了一個(gè)總結(jié),希望對(duì)大家也有幫助2022-07-07

