如何在不使用第三个变量的情况下在 Java 中交换两个字符串变量
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/18528697/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How to swap two string variables in Java without using a third variable
提问by user1281029
How do I swap two string variables in Java without using a third variable, i.e. the temp variable?
如何在 Java 中交换两个字符串变量而不使用第三个变量,即临时变量?
String a = "one"
String b = "two"
String temp = null;
temp = a;
a = b;
b = temp;
But here there is a third variable. We need to eliminate the use of the third variable.
但这里还有第三个变量。我们需要消除第三个变量的使用。
回答by commit
Here you go. Try this:
干得好。尝试这个:
String a = "one";
String b = "two";
//String temp=null;
int i = a.length();
a += b;
b = a.substring(0, i);
a = a.substring(i, a.length());
System.out.println(a + " " + b);
Take any value in as string in a variable. It will be swap.
将任何值作为变量中的字符串。这将是交换。
回答by Jj Tuibeo
For strings:
对于字符串:
String a = "one"
String b = "two"
a = a + b;
b = a.replace(b, "");
a = a.replace(b, "");
回答by Husman
String a="one";
String b="two";
a = a.concat("#" + b);
b = a.split("#")[0];
a = a.split("#")[1];
This will work as long as your string doesn't contain the # character in them. Feel free to use any other character instead.
只要您的字符串中不包含 # 字符,这就会起作用。随意使用任何其他字符。
You could use a possible Unicode character, like "\u001E" instead of the #.
您可以使用可能的 Unicode 字符,例如“\u001E”而不是 #。
回答by Ankur Lathi
Do it like this without using a third variable:
在不使用第三个变量的情况下这样做:
String a = "one";
String b = "two";
a = a + b;
b = a.substring(0, (a.length() - b.length()));
a = a.substring(b.length());
System.out.println("a = " + a);
System.out.println("b = " + b);
回答by Praveen P Moolekandathil
The simplest way is given below:
下面给出最简单的方法:
String a = "one";
String b = "two";
System.out.println("Before swap: " a + " " + b);
int len = a.length();
a = a + b;
b = a.substring(0, len);
a = a.substring(len);
System.out.println("After swap: " a + " " + b);
回答by marcus
// taken from this answer: https://stackoverflow.com/a/16826296/427413
// 取自这个答案:https: //stackoverflow.com/a/16826296/427413
String returnFirst(String x, String y) {
return x;
}
String a = "one"
String b = "two"
a = returnFirst(b, b = a); // If this is confusing try reading as a=b; b=a;
This works because the Java language guarantees (Java Language Specification, Java SE 7 Edition, section 15.12.4.2) that all arguments are evaluated from left to right (unlike some other languages, where the order of evaluation is undefined), so the execution order is:
这是有效的,因为 Java 语言保证(Java 语言规范,Java SE 7 版,第 15.12.4.2 节)从左到右评估所有参数(与某些其他语言不同,评估顺序未定义),因此执行顺序是:
- The original value of
bis evaluated in order to be passed as the first argument to the function - The expression
b = ais evaluated, and the result (the new value ofb) is passed as the second argument to the function - The function executes, returning the original value of
band ignoring its new value - You assing the result to
a - Now the values have been swapped and you didn't need to declare
temp. The parameterxworks astemp, but it looks cleaner because you define the function once and you can use it everywhere.
- 的原始值
b被评估以便作为第一个参数传递给函数 - 计算表达式
b = a,并将结果( 的新值b)作为第二个参数传递给函数 - 函数执行,返回原始值
b并忽略其新值 - 你将结果评估为
a - 现在值已交换,您无需声明
temp. 该参数的x作用是temp,但它看起来更简洁,因为您定义了一次函数,并且可以在任何地方使用它。
回答by Couchcamote
public class SwapStringVariable {
public static void main(String[] args) {
// TODO Auto-generated method stub
String a = "test";
String b = "paper";
a = a + b;
b = a.substring(0, a.length() - b.length());
a = a.substring(b.length(), a.length());
System.out.println(a + " " + b);
}
}
回答by armysheng
Actually, the code in your question did not swap String a,b.
You should see this issue: Swap two strings in Java, by passing them to a utility function, but without returning objects or using wrapper classes
And Java is passing by value: Is Java "pass-by-reference" or "pass-by-value"?
实际上,您问题中的代码没有交换字符串 a,b。
您应该看到这个问题: 在 Java 中交换两个字符串,通过将它们传递给实用程序函数,但不返回对象或使用包装类
Java 是按值传递的: Java 是“按引用传递”还是“按值传递”?
回答by troy
Jj Tuibeo's solutionworks if you add replaceFirst() and use a regular expression:
如果您添加 replaceFirst() 并使用正则表达式,则Jj Tuibeo 的解决方案有效:
a += b;
b = a.replaceFirst(b + "$", "");
a = a.replaceFirst("^" + b, "");
回答by Nirav Dhinoja
String str1 = "first";
String str2 = "second";
str1 = str2+str1;
str2 = str1.substring(str2.length(),str1.length());
str1 = str1.substring(0,(str1.length() - str2.length()));
System.out.println(str1);
System.out.println(str2);

