在Java中反转字符串而不使用任何临时字符串、字符或字符串生成器
是否可以在不使用 String
、Char[]
或 StringBuilder
等临时变量的情况下反转 Java 中的 String
>?
只能使用int
或int[]
。
Is it possible to reverse String
in Java without using any of the temporary variables like String
, Char[]
or StringBuilder
?
Only can use int
, or int[]
.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(11)
输出:
只是为了好玩,当然使用 StringBuffer 会更好,这里我为每个迭代创建新的字符串,唯一的区别是我没有引入新的引用,并且我只有一个 int 计数器。
Output:
Just for the fun of it, of course using StringBuffer would be better, here I'm creating new Strings for each Iteration, the only difference is that I'm not introducing a new reference, and I've only an int counter.
Java String 类的对象是不可变的 - 它们的内容在创建后不能更改。
您将需要至少两个临时对象 - 一个用于最终结果,另一个用于中间值 - 即使您确实找到了一种避免使用局部变量的方法。
编辑:
也就是说,既然你可以使用
int[]
你也许可以作弊。由于
char
可以分配给int
,因此您可以使用String.charAt()
创建一个int
数组,其中字符值按相反顺序排列。或者,您可以使用String.toCharArray()
来获取char
数组,该数组将被复制到您的int[]
临时数组中。然后,您使用保存对原始字符串(或结果变量,如果允许的话)的引用的变量从空字符串开始(可以通过直接赋值或 String.substring() 轻松获得) >) 并使用
String.concat()
创建最终结果。然而,在任何情况下,您都无法像在 C/C++ 中那样就地交换字符。
编辑2:
这是我的版本,内部不使用 StringBuffer/Builders:
The objects of the Java String class are immutable - their contents cannot be altered after being created.
You will need at least two temporary objects - one for the final result and one for the intermediate values - even if you do find a way to avoid using a local variable.
EDIT:
That said, since you can use
int[]
you may be able to cheat.Since
char
can be assigned toint
, you can useString.charAt()
to create anint
array with the character values in reverse order. Or you may be allowed to useString.toCharArray()
to get achar
array that will be copied over to yourint[]
temporary.Then you use the variable that holds the reference to your original string (or the result variable, if you are allowed one) to start from an empty string (easily obtainable with a direct assignment or
String.substring()
) and useString.concat()
to create the final result.In no case, however, will you be able to swap the characters in-place as you would do in C/C++.
EDIT 2:
Here's my version which does not use StringBuffer/Builders internally:
没有临时变量! :)
No temporary variables! :)
多种方法之一:
One of many ways:
因为可以使用 int,所以可以为 int 分配 char 值:
您必须将 int 转换回 char,才能将其分配给 aString.charAt(2)。
我相信你可以从那里弄清楚。
Because you can use an int, you can assign an int a char value:
You will have to convert from the int back to the char to assign it to aString.charAt(2).
I'm sure you can figure it out from there.
首先以相反的方式将字符串附加到自身。然后把后半部分拿出来。
First append the string to itself in reverse manner. Then take the second half out of it.
不使用任何集合、StringBulider、StringBuffer 或临时数组反转字符串。简单明快:
输出
希望有帮助:)
Without using any collection,StringBulider, StringBuffer or temp array reverse the string. Simple and crisp:
Output
Hope it helps :)
循环变量除外。
Except for loop variables.
您可以使用类 java.lang.StringBuilder:
You can use class java.lang.StringBuilder: