看到標題不知道我是否表達得清楚了,我還是通過舉例來說明吧!
比如:String str = "abcd";
通過反轉倒序後輸出:dcba
故此文本主要講述如何將 String 類型的字符串字母倒序過來的幾種方法。下面就列舉如下4種方法並一一說明!
StringBuilder(str).reverse()char[]循環與值交換byte循環與值交換apache-commons-lang3如果僅僅是在實際開發中要實現這個結果,可以選擇StringBuilder(str).reverse() API接口即可。但是出於學習目的,我們可以花點時間學習學習 char[]和 byte 方法,這其中涉及到值互換和移位運算技術,StringBuilder(str).reverse() API接口的實現就是通過這些技術進行實現的,了解這些技術對了解該 API 接口黑匣子背後的原理很有幫助!
1. StringBuilder(str).reverse()
在Java中,我們可以使用StringBuilder(str).reverse()使字符串字母倒序。
輸出結果
avaJ ni gnirtS a esreveR
2. char[]
這一段我們使用 char[]數組進行實現,那要如何做呢?其實也很簡單,通過如下幾步即可:
將字符串轉為 char[]數組逐個循環 char[]數組使用 temp 變量進行值交換
上面的源碼算法實現需要5個循環(長度/ 2)來使字符串倒序「 Hello World」。
下面看看每次循環的結果:
3. Byte[] – StringBuilder(str).reverse(str)
我們看看下面這段代碼,是不是很類似於StringBuilder(str).reverse()的內部實現(UTF16內容除外)。
這裡其實最令人困惑的部分是右移運算符(length - 1) >> 1,這是什麼意思?查看下面的8位示例,您可以找到規律嗎?
對於數字,每右移1位,金額將減少該值的一半並四捨五入。這(length - 1) >> 1試圖找出字符串的中間點。
number >> 1 = round_down(number/2) or Math.flooa(number/2)
值交換從內部開始,然後擴展到外部。
上面的算法圖示如下:
4. Apache commons-lang3
對於Apache commons-lang3庫,我們可以使用StringUtils.reverse反轉字符串和StringUtils.reverseDelimited反轉單詞。這裡我主要介紹使用方法,有興趣的朋友可以取看看內部實現,歡迎大家能在評論區留言進行交流,共同進步!
pom.xml
輸出結果
查看其原始碼,Apache-commons-lang3其實是使用new StringBuilder(str).reverse()來反轉字符串。走到這裡很清楚了reverse()方法的實現就該庫的實現方式。