是否可以在不使用任何临时变量(如String
,String
或Char[]
的情况下撤消Java中的StringBuilder
?
只能使用int
或int[]
。
答案 0 :(得分: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));
}
答案 1 :(得分:10)
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);
输出:
!em esrever
只是为了它的乐趣,当然使用StringBuffer会更好,这里我为每个迭代创建新的字符串,唯一的区别是我没有引入新的引用,我只有一个int计数器。
答案 2 :(得分: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);
答案 3 :(得分:3)
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
没有临时变量! :)
答案 4 :(得分:1)
因为可以使用int,所以可以为int赋值:
String aString = "abc";
int intChar = aString.charAt(0);
您必须将int转换回char以将其分配给aString.charAt(2)。
我相信你可以从那里弄明白。
答案 5 :(得分:1)
首先以相反的方式将字符串附加到自身。然后从下半场开始。
public class RevString {
public static void main(String[] args) {
String s="string";
for(int i=s.length()-1;i>=0;i--){
s+=s.charAt(i);
}
s=s.substring(s.length()/2, s.length());
System.out.println(s);
}
}
答案 6 :(得分:1)
public String reverseStr(String str) {
if (str.length() <= 1) {
return str;
}
return reverseStr(str.substring(1)) + str.charAt(0);
}
答案 7 :(得分:0)
您可以使用java.lang.StringBuilder类:
String reservedString = new StringBuilder(str).reserve().toString();
答案 8 :(得分:0)
不使用任何集合,StringBulider,StringBuffer或temp数组反转字符串。简单明快:
public static void main(String[] args) {
String test = "Hello World";
String rev = "";
Pattern p = Pattern.compile("[\\w|\\W]");
Matcher m = p.matcher(test);
while (m.find()) {
rev = m.group()+rev;
}
System.out.println("Reverse==" + rev);
}
输出
反向== dlroW olleH
希望有所帮助:)
答案 9 :(得分:0)
scala>new Rock winsOver new Rock
res0: Boolean = true
答案 10 :(得分:0)
String str = "Welcome";
for(int i=0;i<str.length();){
System.out.print(str.charAt(str.length()-1));
str = str.substring(0,str.length()-1);
}
除了循环变量。