JAVA 中如何反轉字符串字符,一共4中方式,請牢記!

2020-12-24 計算機java編程

看到標題不知道我是否表達得清楚了,我還是通過舉例來說明吧!

比如: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()方法的實現就該庫的實現方式。

相關焦點

  • Python中如何分割、合併字符串
    字符串分割實例可以看到,雖然分割的方式不同,但是已經被設定為分隔符的字符已被使用,就不會再出現在分割後的列表內。2、合併字符串既然在Python中字符串可以分割,那麼它也提供了一個join()方法可以合併字符串,它的格式是下面這樣的:newstr = string.join(iterable)
  • 深入剖析go中字符串的編碼問題——特殊字符的string怎麼轉byte?
    uint8範圍是0-255,只能夠表示有限個unicode字符,超過255的範圍就會編譯報錯。根據上述關於unicode的定義,4位元組的rune完全兼容兩字節的unicode。rune切片轉為字符串:上述代碼中utf8.EncodeRune的作用是將一個rune轉為utf8位元組序列。
  • Java 字符編碼
    這 2048 個代碼點位於 BMP 內,並且不是有效的字符代碼點,它們是為 UTF 編碼保留的。在 UTF-16 中它可以編碼 BMP 之外的代碼點UTF-8UTF-8 的特點是對不同範圍的字符使用不同長度的編碼。對於 0x00-0x7F 之間的字符,UTF-8 編碼與 ASCII 編碼完全相同。UTF-8 編碼的最大長度是 4 個字節。
  • Python中去除字符串首尾空格、特殊字符和指定子字符串的方法
    第七十七節:去除字符串中的空格和特殊字符字符串在實際應用中,有很多情況是默認去除字符串首尾的空格狀態,去除幾個比較特殊的字符的。這幾個特殊的字符是:換行符「\n」、回車符「\r」、制表符「\t」。去除字符串首尾空格和特殊字符從上面的實例可以看出,在Python的IDLE中,定義好一個字符串後,直接使用字符串變量名回車,就會輸出包含特殊字符的字符串;使用print()函數輸出字符串時
  • 回文字符串問題分析
    回文字符串,是指正讀和倒讀的結果一樣的字符串,從結構上來看,兩側的字符呈中心對稱。在漢語中,有很多有趣的迴文詩詞,回文對聯熟語,比如「響水池中池水響,黃金谷裡谷金黃」、「霧鎖山頭山鎖霧,天連水尾水連天」等。
  • Java中10大常問的關於String的問題
    從 JDK7 開始,這是可以的java 6 及以前的版本都不支持這樣做// 只在java 7及更高版本有!switch (str.toLowerCase()) {case 「a」:value = 1;break;case 「b」:value = 2;break;}4.
  • java之字符緩衝輸入流,BufferedReader的簡單介紹
    各位小夥伴們大家好,在之前的文章中,小編介紹了字符緩衝輸出流java之字符緩衝輸出流,BufferedWriter的簡單介紹,這次小編要介紹的是字符緩衝輸入流,具體如下:java.io.BufferedReader extends Reader繼承自父類的共性成員文件:int read()讀取單個字符並返回int read(char[] cbuf)一次讀取多個字符
  • 你真的知道 Python 字符串怎麼用嗎?
    、join())與插值類(f-string),在使用上,我有如下建議:當要處理字符串列表等序列結構時,採用join()方式;拼接長度不超過20時,選用+號操作符方式;長度超過20的情況,高版本選用f-string,低版本時看情況使用format()或join()方式。
  • 4個代碼中,字符串的出現頻率,我們比一比
    在程式設計師的代碼裡,字符串是經常出現的形式。解釋是這樣解釋的,但是不知道特殊字符是如何測試的。其實,下面這段英文,也是同樣的功效,而且更短。The five boxing wizards jump quickly。沒錯,它一度時間是我的個人密碼。大中華的文字,卻無法這麼玩,因為方塊字實在是太多了。
  • C語言|字符串數組的初始化
    用字符串初始化2. 用單個字符初始化在這裡我們可以看到,存儲「hello」的字符串數組的大小應該至少為6的,但這裡我們發現把數組的大小設為5,程序也可以正常運行,如下圖所示。再小了就會報錯了但是,在用第一種方法,即直接用字符串賦值的時候卻要嚴格遵守字符串數組的大小規則此時程序報錯,有知道這是為什麼的朋友可以留言或者私信我在插入了』\0』之後,字符串就結束了也可以在其中插入回車符來實現換行的效果
  • Python 格式化字符串的最佳姿勢
    對於用 Python 處理數據和文本的同學一定經常要和字符串格式化打交道
  • [亂碼必看]深度長文--聊聊Unicode字符編碼
    在unicode中,一個字符就是兩個字節。一個漢字算兩個英文字符的時代已經快過去了。unicode在很長一段時間內無法推廣,直到網際網路的出現,為解決unicode如何在網絡上傳輸的問題,於是面向傳輸的眾多 UTF(UCS Transfer Format)標準出現了,顧名思義,UTF-8就是每次8個位傳輸數據,而UTF-16就是每次16個位。
  • 魔獸世界:六串神秘「字符」,玩了多年魔獸,還是沒搞懂啥意思
    隨後又有許多玩家開始尋找,暴雪為什麼要在這把武器上印刻「AL」這樣的字符,最後依舊是眾說紛紜,這串神秘的字符,就成為了這把武器最形象的代表!,後來在布林頓任務系列中,同樣開出了一堆亂碼的介紹面板,才知道這串神秘的亂碼是別有用意的,不過對於學渣的我來說,這就是一串神秘的亂碼!
  • 20.表示數值的字符串(劍指 Offer 題解,面試遇到好多次)
    例如,字符串"+100",「5e2」,"-123",「3.1416"和」-1E-16"都表示數值。但是"12e",「1a3.14」,「1.2.3」,"±5"和"12e+4.3"都不是。」思路思路一:利用正則表達式,對字符串中的每個字符進行判斷分析package 劍指offer.表示數值的字符串_20;/*作者 :XiangLin文件 :Solution20
  • 聊聊Java中codepoint和UTF-16相關的一些事
    Unicode字符集規定的標準編碼方案是UCS-2(UTF-16),用兩個字節表示一個Unicode字符(UTF-16中兩個字節的為基本多語言平面字符,4個字節的為輔助平面字符)。而UCS-4(UTF-32)用4個字節表示一個Unicode字符。另外一個常用的Unicode編碼方案–UTF-8用1到4個變長字節來表示一個Unicode字符,並可以從一個簡單的轉換算法從UTF-16直接得到。
  • EXCEL中如何實現按字符數量進行排序?
    前面我們說到了按數值大小排序、按多個關鍵字排序、按名字的首字母進行排序,今天跟大家介紹下如何按字符數量進行排序。什麼叫按字符數量進行排序呢?簡單點說就是我有一列單元格,有些單元格字符數量比較少,有些單元格字符數量比較多,我們就可以按照字符數量的多少來給單元格做一個排序。不過EXCEL裡面有沒直接按字符數量進行排序的功能,這裡我們需要用到公式來轉換一下。
  • 《第2章 Python 語法基礎》2.3.2 字符串!
    《高中信息技術 Python編程》 教學案 《第2章 Python 語法基礎》2.3.2 字符串!瀏覽器版本過低,暫不支持視頻播放2.3.2、字符串:字符串是連續的1、定界符:單引號:' '雙引號:" "三引號:''' ''';""" """單引號和雙引號中的字符串序列
  • word中如何輸入√、×等特殊字符,將你4個方法快速輸入特殊字符
    在我們日常使用word的工作中,經常會遇到輸入一些特殊符號的需求,比如√、×、等等,那麼這些特殊符號都如何輸入呢,今天就給大家盤點一些常用的特殊符號的輸入方法。字母快捷鍵輸入4、 插入符號這個方法可能沒有上面三個方法快速便捷,但是能夠解決一些更加細節的符號的輸入。
  • 沒想到 Unicode 字符還能這樣玩?
    我們可以利用 Chrome 瀏覽器的控制臺複製零寬字符,操作方式如下: 隱形水印主要原理就是將用戶信息比如用戶名,通過一定算法轉成零寬字符,這樣普通用戶瀏覽時完全看不到這個水印。如果內容被複製到其他網站,隱形水印也被複製,只要找到這個水印,將這些零寬字符反轉成用戶名即可。
  • Java基礎教程:Java包裝類概念及應用
    用Integer與 int為例:(看懂代碼即可)基本數值---->包裝對象Integer i = new Integer(4);//使用構造函數函數Integer iii = Integer.valueOf(4);//使用包裝類中的