如何处理特殊字符,如" \ n"在字符串反向?

时间:2014-04-24 06:16:33

标签: java string algorithm

我有以下代码来反转字符串,我正在考虑为它制作测试用例。我想知道如何处理用户输入" \ n"," \ t" ?

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);
}

4 个答案:

答案 0 :(得分:4)

 StringBuilder str = new StringBuilder("Java");

    // reverse characters of the StringBuilder and prints it

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

答案 1 :(得分:4)

在&#34; \ nxyz&#34;等字符串中,str.toCharArray()处理&#34; \ n&#34;作为一个单一的角色。您的代码中没有问题。新行char的唯一的地方会改变,这次会以不同的行格式打印。

答案 2 :(得分:3)

为什么不使用StringBuilder来反转它:

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

答案 3 :(得分:2)

你的问题含糊不清,答案不是那么简单。

如果您所谓的用户输入是一个Java文字字符串,如"newline -\n-",则序列\n将变为单个换行符。打印字符串时,您再也看不到\n。相反,进一步的输出转到下一行,给出

newline -
-

(11个字符)。逆转给出了

-
- enilwen

相反,如果用户输入来自键盘,则无法识别转义并且打印将输出不变的字符串。

newline -\n-

(12个字符)。逆转给出了

-n\- enilwen

如果您希望识别和翻译转义符,则需要通过检查每个输入字符来自行完成。

在最奇怪的情况下,您可以在反转后恢复转义(以便它们再次可见),给出转换

newline -\n-

(12个字符)然后在内部,

newline -
-

(11个字符)然后内部颠倒,

-
- enilwen

(11个字符)然后外部

-\n- enilwen

(12个字符)。请注意上述n\\n的区别。