在Java中反转字符串,而不使用任何临时字符串、字符或字符串生成器
是否可以在Java中反转在Java中反转字符串,而不使用任何临时字符串、字符或字符串生成器,java,string,reverse,temp,Java,String,Reverse,Temp,是否可以在Java中反转String,而不使用任何临时变量,如String、Char[]或StringBuilder 只能使用int或int[]Java字符串类的对象是不可变的-它们的内容在创建后不能更改 即使找到了避免使用局部变量的方法,也至少需要两个临时对象——一个用于最终结果,一个用于中间值 编辑: 这就是说,因为你可以使用int[]你可能会作弊 由于可以将char分配给int,因此可以使用创建一个int数组,其中字符值的顺序相反。或者您可以使用String.tocharray()获取一个
String
,而不使用任何临时变量,如String
、Char[]
或StringBuilder
只能使用
int
或int[]
Java字符串类的对象是不可变的-它们的内容在创建后不能更改
即使找到了避免使用局部变量的方法,也至少需要两个临时对象——一个用于最终结果,一个用于中间值
编辑:
这就是说,因为你可以使用int[]
你可能会作弊
由于可以将char
分配给int
,因此可以使用创建一个int
数组,其中字符值的顺序相反。或者您可以使用String.tocharray()
获取一个char
数组,该数组将被复制到您的int[]
临时数组中
然后使用保存原始字符串引用的变量(或结果变量,如果允许的话)从空字符串开始(通过直接赋值或string.substring()
)并使用string.concat()
创建最终结果
但是,在任何情况下,您都不能像在C/C++中那样就地交换字符
编辑2:
以下是我在内部不使用StringBuffer/Builder的版本:
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));
}
String s=“你好,世界!”;
对于(int i=0;i
没有临时变量!:) 因为可以使用int,所以可以为int指定char值:
String aString = "abc";
int intChar = aString.charAt(0);
您必须将int转换回char,才能将其分配给aString.charAt(2)
我相信你可以从那里找到答案。很多方法之一:
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);
为了好玩,当然使用StringBuffer会更好,这里我为每次迭代创建新字符串,唯一的区别是我没有引入新引用,我只有一个int计数器。您可以使用java.lang.StringBuilder类:
String reservedString = new StringBuilder(str).reserve().toString();
首先以相反的方式将字符串附加到自身。然后把后半部分拿出来
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);
}
}
publicstringreversestr(stringstr){
如果(str.length()不使用任何集合,则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
希望有帮助:)公共类测试{
静态St`enter code here`ring reverseString(字符串str){
对于(int i=0;i
String str=“欢迎”;
对于(int i=0;iIs)此作业?不会使用int
或int[]
compose temporaries?任何反转字符串的方法都必须依赖于临时信息,不管它是否被封装。@Eng.Fouad:他说他不能有StringBuffers之类的like@kaibuki你想问应聘者一个你无法回答的面试问题吗?OP说没有StringBuilder,问题说没有使用StringBuilder Library这太棒了!!感谢您的视角!
String reservedString = new StringBuilder(str).reserve().toString();
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);
}
}
public String reverseStr(String str) {
if (str.length() <= 1) {
return str;
}
return reverseStr(str.substring(1)) + str.charAt(0);
}
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);
}
public class Test {
static St`enter code here`ring reverseString(String str) {
for (int i = 0; i < str.length() / 2; i++) {
if (i == 0) {
str = str.charAt(str.length() - 1 - i) + str.substring(i + 1, str.length() - 1 - i) + str.charAt(i);
} else {
str = str.substring(0, i) + str.charAt(str.length() - 1 - i)
+ str.substring(i + 1, str.length() - 1 - i) + str.charAt(i)
+ str.substring(str.length() - i, str.length());
}
}
return str;
}
public static void main(String args[]) {
String s = "ABCDE";
System.out.println(Test.reverseString(s));
}
}
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);
}