2014-04-24 42 views
2

我有以下代碼來反轉字符串,我正在考慮爲它製作測試用例。我想知道如何處理用戶輸入「\ n」,「\ t」時的情況?如何處理字符串反轉中的「 n」等特殊字符?

private static String reverse2(String str) { 
    if (str == null || str.length() == 0) 
     return str; 

    int start = 0; 
    int end = str.length() - 1; 

    char[] chars = str.toCharArray(); 
    while (start < end) { 
     char tmp = chars[start]; 
     chars[start] = chars[end]; 
     chars[end] = tmp; 

     start++; 
     end--; 
    } 

    return String.valueOf(chars); 
} 
+2

StringBuilder有一個方法reverse()!只是使用 –

+3

嘗試反轉字符串時'\ n'或'\ t'有什麼問題? (他們被視爲單個字符,所以如果這是你的擔心,它們不會以'n \'結尾) – Dukeling

回答

4

在像 「\ nxyz」,str.toCharArray()治療 「\ n」 個爲單個字符的字符串。你的代碼沒有問題。只有新行字符的地方會改變,這次會以不同的行格式打印。

4
StringBuilder str = new StringBuilder("Java"); 

    // reverse characters of the StringBuilder and prints it 

    System.out.println("reverse = " + str.reverse()); 
3

爲什麼不使用一個StringBuilder扭轉它:

string input = "xyz\t\nabc123"; 
string reversed = new StringBuilder(input).reverse().toString(); 
2

你的問題不明確,答案也不那麼簡單。

如果你叫什麼用戶輸入就像"newline -\n-"一個Java文字串,序列\n變成一個換行符。當您打印字符串時,您再也看不到\n。相反,進一步輸出到下一行,給出

newline - 
- 

(11個字符)。反轉給

- 
- enilwen 

在相反,如果用戶輸入是從鍵盤,所述逃逸將無法識別和打印將輸出串不變。

newline -\n- 

(12個字符)。反向給出

-n\- enilwen 

如果您想要識別和翻譯轉義字符,您需要通過檢查每個輸入字符來自己做。

在怪異的情況下,你可以恢復逃逸逆轉後(讓他們再次變得可見),賦予變換

newline -\n- 

(12個字符),然後在內部,

newline - 
- 

(11個字符)然後內部反轉,

- 
- enilwen 

(11個字符)然後在外部

-\n- enilwen 

(12個字符)。請注意與n\\n之間的區別。