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);
}
}
使用方法:
- subString(int startIndex,int endIndex):傳回一個從startIndex到endIndex的字元串,需要注意的是startIndex包含,endIndex不包含。
- subString(int startIndex):傳回一個從startIndex開始到字元串結束位置的字元串。
- 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的選擇需要注意的問題:
- StringBuilder、StringBuffer中的方法和功能是完全等價的。
- StringBuffer中的方法基本采用synchronized關鍵字修飾,是以是線程安全的;而StringBuilder沒有這個修飾,是以是線程不安全的。
- StringBuilder的執行效率高于StringBuffer。