Java字符串--給定一個字符串,將其整個字符串反轉


題目描述:給定一個字符串,每個單詞以空格字符分開,將其整個字符串反轉.

  

 

 方法一:使用Java純工具類以及一些特定的API來解決這個問題:

 1 /**
 2  * 〈一句話功能簡述〉<br> 
 3  * 〈字符串反轉算法〉
 4  *  利用Java提供的特性
 5  * @author wangkai_wb
 6  * @create 2020/6/19
 7  * @since 1.0.0
 8  * 解題思路:利用Java語言提供的特性,比如先通過String的split()方法拆分,
 9  * 然后通過集合工具類Collection.reverse()方法,最后再返回字符串
10  */
11 public class StringReverse {
12     public static void main(String[] args) {
13         String str = "the sky is blue";
14         System.out.println("原字符串:"+str);
15         //使用\\s+正則來以空格拆分字符串
16         String[] strs = str.split("\\s+");
17         //使用工具類Arrays.asList()將其轉換為list集合
18         List<String> stringList = Arrays.asList(strs);
19         //使用Collections.reverse()方法反轉內容
20         Collections.reverse(stringList);
21         //使用StringJoiner來拼接反轉后的字符串即可
22         str = String.join(" ",stringList);
23         //打印str
24         System.out.println("反轉后的字符串:"+str);
25     }
26 }

測試結果:

 

 方法二:何用雙指針解法,一個指針負責循環遍歷,另一個指針負責條件處理.

 1 /**
 2  * 〈一句話功能簡述〉<br> 
 3  * 〈字符串反轉算法〉
 4  *
 5  * @author wangkai_wb
 6  * @create 2020/6/19
 7  * @since 1.0.0
 8  * 解題思路:使用雙指針的核心思想:一個指針負責循環遍歷,另一個指針負責條件處理
 9  */
10 public class StringReverse1 {
11     public static void main(String[] args) {
12         String str = "the sky is blue";
13         System.out.println("原字符串:"+str);
14         //定義左右指針,右指針不動,左指針向左移動取單詞
15         int right = str.length() -1;
16         int left = right;
17         //存放反轉后的字符串
18         StringBuilder stringBuilder = new StringBuilder();
19         while (left >= 0){
20             //查找第一次出現的空格
21             while (left>=0 && str.charAt(left) !=' ')
22                 left --;
23             //將單詞方到stringBuilder對象中
24             stringBuilder.append(str.substring(left+1,right+1)+" ");
25             //跳動單詞之間的空格
26             while (left >= 0 && str.charAt(left) ==' ')
27                 left --;
28             //right指向下個單詞的詞尾,左指針繼續前進
29             right = left;
30         }
31         //去掉末尾的空格
32         System.out.println("反轉后的字符串:"+stringBuilder.toString().trim());
33     }
34 }

測試結果:

 

 方法三:使用雙端隊列實現

 1 /**
 2  * 〈一句話功能簡述〉<br> 
 3  * 〈字符串反轉算法〉
 4  *
 5  * @author wangkai_wb
 6  * @create 2020/6/19
 7  * @since 1.0.0
 8  * 解題思路:因為雙端隊列可以支持從隊列頭部插入的方法,
 9  * 所以我們可以將字符串中的單詞一個一個進行處理,
10  * 然后將每一個單詞push到隊列的頭部,再將隊列轉成字符串即可.
11  */
12 public class StringReverse2 {
13     public static void main(String[] args) {
14         String str = "the sky is blue";
15         System.out.println("原字符串:"+str);
16         int left = 0;
17         int right = str.length() -1;
18         //構建雙端隊列
19         Deque<String> deque = new ArrayDeque<>();
20         StringBuilder word = new StringBuilder();
21         while (left <= right){
22             char charStr = str.charAt(left);
23             if ((word.length() !=0) && (charStr ==' ')){
24                 //將單詞push到隊列的頭部
25                 deque.offerFirst(word.toString());
26                 word.setLength(0);
27 
28             }else if (charStr != ' '){
29                 word.append(charStr);
30             }
31             ++left;
32         }
33         deque.offerFirst(word.toString());
34         System.out.println("反轉后的字符串:"+String.join(" ",deque));
35     }
36 }

測試結果:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM