2013-08-27 56 views
0

我試圖交換第一和最後一個字符的字符串所以我所做的就是我能夠檢索它的第一個和最後一個字符,但我現在有困難的時候把它們放在一起:字符交換

String name="pera"; 
    char[] c = name.toCharArray(); 
    char first = c[0]; 
    char last = c[c.length-1]; 
    name.replace(first, last); 
    name.replace(last, first); 
    System.out.println(name); 

儘管我正在爲變量「第一」獲取「p」的值,而爲變量「最後」獲取「a」的值,但這些方法的replace()不會以有效的結果出現,因爲名稱保持爲它是。有沒有人有如何完成這個任何想法?

+0

字符串是不可改變的,所以你必須獲得通過返回'String'參考了'替換'方法。 – superEb

回答

1

交換第一與最後很容易這樣的:

String str = "SwapDemo"; 
String swapped = str.charAt(str.length() - 1) + str.substring(1, str.length() - 1) + str.charAt(0); 

您嘗試的方法將取代傳遞的參數,它是不是所有的出現你想要的東西。上面的代碼將做你想要的。

正如Arnoud指出的那樣,字符串是不可變的。但是,修復這個問題,你仍然會得到錯誤的結果爲:

acbbc 

例如

+0

謝謝先生,這是迄今爲止最簡單和最舒適的方式。 –

+0

您可以接受答案,將問題標記爲已關閉。 –

7

1)字符串在Java 不變。所以name.replace(first, last)將不會修改name但會返回一個新的字符串。

2)String#replace(char oldChar, char newChar)用newChar替換此字符串中所有出現的oldChar。

例如:

System.out.println("aaaddd".replace("a","d")); 

會給:

dddddd 

可能的解決方案:如果您轉換您Stringchar[],你可以很容易地交換角色:

public static String inverseFirstAndLast(String str){ 
    char[] c = str.toCharArray(); 
    Character temp = c[0]; 
    c[0] = c[c.length-1]; 
    c[c.length-1]=temp; 
    return new String(c); 
} 
+0

+1,你也許想告訴如何解決OP的問題? – sanbhat

+0

我仍然認爲沒有分配給某些東西的非空函數應該會引發編譯錯誤。 – Cruncher

+1

@sanbhat我正在準備一個更完整的答案,因爲OP的第二個錯誤'name.replace'將取代String中所有* first的出現。 –

0

這裏有一個基於GEX解決方案:

String str = "demo"; 
String swapped = str.replaceAll("^(.)(.*)(.)$", "$3$2$1"); 
1
c[0] = last; 
c[c.length-1] = first; 
System.out.println(new String(c)); 
0

相關@Martijn Courteaux的解決方案。您還可以存儲相同str字符串中的結果,因此節省的空間一點點,像這樣:

String str = "pera"; 
String str = str.charAt(str.length() - 1) + str.substring(1, str.length() - 1) + str.charAt(0);