Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中反转字符串,而不使用任何临时字符串、字符或字符串生成器_Java_String_Reverse_Temp - Fatal编程技术网

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

在Java中反转字符串,而不使用任何临时字符串、字符或字符串生成器,java,string,reverse,temp,Java,String,Reverse,Temp,是否可以在Java中反转String,而不使用任何临时变量,如String、Char[]或StringBuilder 只能使用int或int[]Java字符串类的对象是不可变的-它们的内容在创建后不能更改 即使找到了避免使用局部变量的方法,也至少需要两个临时对象——一个用于最终结果,一个用于中间值 编辑: 这就是说,因为你可以使用int[]你可能会作弊 由于可以将char分配给int,因此可以使用创建一个int数组,其中字符值的顺序相反。或者您可以使用String.tocharray()获取一个

是否可以在Java中反转
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);
}