天天看點

Java:字元串反轉的三種方式Java:字元串反轉的三種方式

Java:字元串反轉的三種方式

方式一:轉換為char[]數組

//方式一:轉換為char[]數組
public class reverseString{
    public String reverse(String str,int startIndex,int endIndex){
        if(str!=null){
            //調用String類的toCharArray方法将字元串轉換為char[]數組
            char[] arr = str.toCharArray();
            //反轉指定的字元串
            for(int x=startIndex,y=endIndex;x<y;x++,y--){
                char temp = arr[x];
                arr[x]=arr[y];
                arr[y]=temp;
            }
            //調用String構造器,将char[]數組轉換為String類型傳回
            return new String(arr);
        }else
            throw new RuntimeException("輸入字元串為空!");
    }
    @Test
    public void test(){
        String str = "abc123";
        String reStr = reverse(str,0,4);
        System.out.println(reStr);
    }
}
           

方式二:使用拼接操作

//方式二:使用拼接操作
public class reverseString1 {
    public String reverse(String str,int startIndex,int endIndex){
        if(str!=null){
            //String subString(int beginIndex,int endIndex):
            // 傳回一個新的字元串,begin包含,end不包含
            String reverseStr = str.substring(0,startIndex);
            for(int i = endIndex;i>=startIndex;i--){
                //char charAt(int index):傳回某索引處的字元
                reverseStr+=str.charAt(i);
            }
            //String subString(int beginIndex):
            // 傳回一個新的字元串,它是此字元串從begin位置開始的字元串
            reverseStr+=str.substring(endIndex+1);
            return reverseStr;
        }else throw new RuntimeException("字元串為空!");
    }
    @Test
    public void test(){
            String Str = "abc123";
            String reverseStr = reverse(Str,0,3);
            System.out.println(reverseStr);
    }
}

           

使用方法:

  1. subString(int startIndex,int endIndex):傳回一個從startIndex到endIndex的字元串,需要注意的是startIndex包含,endIndex不包含。
  2. subString(int startIndex):傳回一個從startIndex開始到字元串結束位置的字元串。
  3. chaAt(int Index):傳回指定Index位置的字元。

方式三:使用StringBuffer/StringBuilder替換String

//方式三:使用StringBuilder/StringBuffer替換String
public class reverseString2 {
    public String reverse(String Str,int startIndex,int endIndex){
        if (Str!=null){
            //建立指定長度的StringBuilder對象
            StringBuilder reverseStr = new StringBuilder(Str.length());
            //使用StringBuilder類的append方法:相當于"+"
            reverseStr.append(Str.substring(0,startIndex));
            for (int i = endIndex; i >=startIndex ; i--) {
                reverseStr.append(Str.charAt(i));
            }
            reverseStr.append(Str.substring(endIndex+1));
            //StringBuilder類中重寫了toString:傳回String類型的資料
            return reverseStr.toString();

        }else throw new RuntimeException("輸入字元串為空!");
    }
    @Test
    public void test(){
        String str = "abc123";
        String reverseStr = reverse(str,0,3);
        System.out.println(reverseStr);
    }
}
           

StringBuilder、StringBuffer的選擇需要注意的問題:

  1. StringBuilder、StringBuffer中的方法和功能是完全等價的。
  2. StringBuffer中的方法基本采用synchronized關鍵字修飾,是以是線程安全的;而StringBuilder沒有這個修飾,是以是線程不安全的。
  3. StringBuilder的執行效率高于StringBuffer。

以上便是個人總結的反轉指定字元串的方法,單線程情況下推薦使用第三種使用StringBuilder類的方法,如果各位大牛有更好的方法,歡迎分享。