在Java中反转字符串而不使用任何临时字符串,字符串或字符串生成器

kai*_*uki 7 java string reverse temp

是否可以String在不使用任何临时变量的情况下在Java中反转String,Char[]或者StringBuilder

只能使用int,或int[].

sti*_*vlo 11

String reverseMe = "reverse me!";
for (int i = 0; i < reverseMe.length(); i++) {
    reverseMe = reverseMe.substring(1, reverseMe.length() - i)
        + reverseMe.substring(0, 1)
        + reverseMe.substring(reverseMe.length() - i, reverseMe.length());
 }
 System.out.println(reverseMe);
Run Code Online (Sandbox Code Playgroud)

输出:

!em esrever
Run Code Online (Sandbox Code Playgroud)

只是为了它的乐趣,当然使用StringBuffer会更好,这里我为每个迭代创建新的字符串,唯一的区别是我没有引入新的引用,而且我只有一个int计数器.


thk*_*ala 10

Java String类的对象是不可变的 - 它们的内容在创建后不能更改.

需要至少两个临时对象 - 一个用于最终结果,一个用于中间值 - 即使您确实找到了避免使用局部变量的方法.

编辑:

也就是说,既然你可以使用int[]你也许可以作弊.

由于char可以分配int,因此可以使用相反顺序String.charAt()创建int具有字符值的数组.或者您可能被允许使用String.toCharArray()以获取char将被复制到int[]临时的数组.

然后使用保存对原始字符串的引用的变量(或结果变量,如果允许的话)从空字符串开始(可通过直接赋值轻松获得或String.substring())并用于String.concat()创建最终结果.

但是,在任何情况下,您都不能像在C/C++中那样就地交换字符.

编辑2:

这是我的内部不使用StringBuffer/Builders的版本:

int r[] = new int[s.length()];

int idx = r.length - 1;

for (int i : s.toCharArray()) {
    r[idx--] = i;
}

s = s.substring(0, 0);

for (int i : r) {
    s = s.concat(String.valueOf((char)i));
}
Run Code Online (Sandbox Code Playgroud)


Eng*_*uad 5

String s = "Hello World!";
for(int i = 0; i < s.length(); i++)
{
    s = s.substring(1, s.length() - i) + s.charAt(0) + s.substring(s.length() - i);
}
System.out.println(s); // !dlroW olleH
Run Code Online (Sandbox Code Playgroud)

没有临时变量!:)


cla*_*977 5

许多方法之一:

    String str = "The quick brown fox jumps over the lazy dog";

    int len = str.length();
    for (int i = (len-1); i >= 0; --i) 
        str += str.charAt(i);
    str = str.substring(len);

    System.out.println(str);
Run Code Online (Sandbox Code Playgroud)