Java中5種方式實現(xiàn)String反轉(zhuǎn)
這里介紹Java中5中實現(xiàn)String反轉(zhuǎn)的方式。
一、數(shù)組實現(xiàn)String反轉(zhuǎn)
//數(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);
}
二、棧實現(xiàn)String反轉(zhuǎn)
//用棧實現(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);//每個字符,推進棧
}
for (int i = 0; i < ch.length; i++) {
ch[i] = stack.pop();//移除這個堆棧的頂部對象
}
return new String(ch);
}
三、逆序遍歷實現(xiàn)String反轉(zhuǎn)
//用逆序遍歷實現(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();
}
四、位運算實現(xiàn)String反轉(zhuǎn)
//使用位運算實現(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);
}
五、遞歸實現(xiàn)String反轉(zhuǎn)
//使用遞歸實現(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 {
//從下標為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));
}
}
七、結(jié)果

八、用于String反轉(zhuǎn)的全部代碼
public class Reverse {
private String str = null;
public Reverse(String str){
this.str = str;
}
//數(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);
}
//用棧實現(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);//每個字符,推進棧
}
for (int i = 0; i < ch.length; i++) {
ch[i] = stack.pop();//移除這個堆棧的頂部對象
}
return new String(ch);
}
//用逆序遍歷實現(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();
}
//使用位運算實現(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);
}
//使用遞歸實現(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 {
//從下標為1開始截取字符串,在返回下標為0的字符
return reverseByRecursive(str.substring(1)) + str.charAt(0);
}
}
}
以上這篇Java中5種方式實現(xiàn)String反轉(zhuǎn)就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
詳解獲取Spring MVC中所有RequestMapping以及對應(yīng)方法和參數(shù)
本篇文章主要介紹了詳解獲取Spring MVC中所有RequestMapping以及對應(yīng)方法和參數(shù),具有一定的參考價值,感興趣的小伙伴們可以參考一下。2017-03-03
解決mybatis plus 分頁查詢有條數(shù),total和pages都是零的問題
這篇文章主要介紹了解決mybatis plus 分頁查詢有條數(shù),total和pages都是零的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-11-11
Java中的String對象數(shù)據(jù)類型全面解析
首先String不屬于8種基本數(shù)據(jù)類型,String是一個對象,因為對象的默認值是null,所以String的默認值也是null;但它又是一種特殊的對象,有其它對象沒有的一些特性2012-11-11
解決spring cloud zuul與nginx的域名轉(zhuǎn)發(fā)問題
這篇文章主要介紹了spring cloud zuul與nginx的域名轉(zhuǎn)發(fā)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07
使用Maven Archetype插件構(gòu)建Maven工程原型模板的實例
下面小編就為大家分享一篇使用Maven Archetype插件構(gòu)建Maven工程原型模板的實例,具有很好的參考價值,希望對大家有所幫助2017-12-12
Springboot Autowried及Resouce使用對比解析
這篇文章主要介紹了Springboot Autowried及Resouce使用對比解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-06-06
java使用FastJson解析Json數(shù)據(jù)
本篇文章主要介紹了java使用FastJson解析Json數(shù)據(jù),fastjson 是一個性能極好的用 Java 語言實現(xiàn)的 JSON 解析器和生成器,有興趣的可以了解一下。2017-02-02
Spring Boot中使用AOP統(tǒng)一處理web層異常的方法
這篇文章主要介紹了Spring Boot中使用AOP統(tǒng)一處理web層異常的相關(guān)資料,需要的朋友可以參考下2018-03-03

