日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

【Java】转置String的各种方法分析

發布時間:2025/3/15 java 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Java】转置String的各种方法分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

字符串倒置

說到這字符串倒置,其實還有些值得說道的,盡管不難。
C/C++有個reverse(),可以直接用,但我大Java并沒有……
想到一種辦法并不難,但你能想到幾種有效的辦法呢?
一起來看看吧!

先做一下基本的定義,后面可以統一使用:

String string = "ADFGJINJOOKC"; int length = string.length(); char[] chars0 = string.toCharArray();

Strategy_1:倒轉char[]

倒轉char[]其實就是新生成一個char[],正向遍歷原char[],把char數據逆向復制到新char[]中。

char[] chars1 = new char[length]; for (int i = 0; i < length; i++) {chars1[i] = chars0[length-i-1]; } System.out.println(new String(chars1));

Strategy_2:利用StringBuilder的reverse()

雖然String沒有reverse(),但可以利用String對象生成StringBuilder對象,再reverse(),打印就直接調toString()了,方便簡潔。

System.out.println(new StringBuilder(string).reverse());

Strategy_3:直接拼接

所謂直接拼接,其實就是new一個StringBuilder對象,倒著遍歷char[],把char一個一個append()到StringBuilder對象上。

StringBuilder reverse3 = new StringBuilder(); for (int i = length-1; i >= 0; i--) {reverse3.append(chars0[i]); } System.out.println(reverse3);

看了解法二,說實話,此法大可不必……

Strategy_4:直接倒著打印

倒著遍歷,直接打印。
由于需要大量的IO,所以慢。
也就初學者會真的這么用吧……

for (int i = length-1; i >= 0; i--) {System.out.print(chars0[i]); } System.out.println();

Strategy_5:利用charAt(i)來拼接

String確實有charAt(i),但為什么擺著現成的隨機訪問index不用呢?何必何必,感覺還不如方法三。

StringBuilder reverse5 = new StringBuilder(); for (int i = length-1; i >= 0; i--) {reverse5.append(string.charAt(i)); } System.out.println(reverse5);

Strategy_6:使用棧來拼接

棧自然是可以的,LIFO,但單獨拿出來而不利用數組的隨機訪問,大可不必。

何況是Java的java.util.Stack,繼承自java.util.Vecter的一個類,一個被synchronized包裹的類,不必……

Stack<Character> stack = new Stack<>(); for (char c : chars0) {stack.push(c); } StringBuilder reverse6 = new StringBuilder(); while (!stack.isEmpty()) {reverse6.append(stack.pop()); } System.out.println(reverse6);

Strategy_7:兩側向中間交換

這個思想就是swap(),經典的交換算法。

char[] chars7 = chars0; for (int i = 0; i < length/2; i++) {char temp = chars7[i];chars7[i] = chars7[length-i-1];chars7[length-i-1] = temp; } System.out.println(new String(chars7));

Strategy_7の位運算優化

先寫swap():

private static void swap(char a, char b) {if (a != b) {a ^= b;b ^= a;a ^= b;} }

再寫具體的交換:(畢竟引用傳遞嘛,隱去了指針,不需使用&)

char[] chars8 = chars0; for (int i = 0; i < length/2; i++) {swap(chars8[i], chars8[length-i-1]); } System.out.println(new String(chars8));

完整Java代碼

import java.util.Stack;public class StringReverseTest {private static void swap(char a, char b) {if (a != b) {a ^= b;b ^= a;a ^= b;}}public static void main(String[] args) {String string = "ADFGJINJOOKC";int length = string.length();char[] chars0 = string.toCharArray();//方法一:倒轉char[]char[] chars1 = new char[length];for (int i = 0; i < length; i++) {chars1[i] = chars0[length-i-1];}System.out.println(new String(chars1));//方法二:利用StringBuilder的reverse()System.out.println(new StringBuilder(string).reverse());//方法三:直接拼接StringBuilder reverse3 = new StringBuilder();for (int i = length-1; i >= 0; i--) {reverse3.append(chars0[i]);}System.out.println(reverse3);//方法四:直接倒著打印for (int i = length-1; i >= 0; i--) {System.out.print(chars0[i]);}System.out.println();//方法五:利用charAt(i)來拼接StringBuilder reverse5 = new StringBuilder();for (int i = length-1; i >= 0; i--) {reverse5.append(string.charAt(i));}System.out.println(reverse5);//方法六:使用棧來拼接Stack<Character> stack = new Stack<>();for (char c : chars0) {stack.push(c);}StringBuilder reverse6 = new StringBuilder();while (!stack.isEmpty()) {reverse6.append(stack.pop());}System.out.println(reverse6);//方法七:兩側向中間交換char[] chars7 = chars0;for (int i = 0; i < length/2; i++) {char temp = chars7[i];chars7[i] = chars7[length-i-1];chars7[length-i-1] = temp;}System.out.println(new String(chars7));//swap()char[] chars8 = chars0;for (int i = 0; i < length/2; i++) {swap(chars8[i], chars8[length-i-1]);}System.out.println(new String(chars8));}}

表表態

個人用著方法二,那個StringBuilder的reverse()比較順手。

總結

以上是生活随笔為你收集整理的【Java】转置String的各种方法分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。