如何在不使用第三个变量(即temp变量)的情况下在Java中交换两个字符串变量?
String a = "one"
String b = "two"
String temp = null;
temp = a;
a = b;
b = temp;
Run Code Online (Sandbox Code Playgroud)
但这里有第三个变量.我们需要消除第三个变量的使用.
Ank*_*thi 34
不使用第三个变量就这样做:
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);
Run Code Online (Sandbox Code Playgroud)
mar*_*cus 12
//取自这个答案: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;
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为Java语言保证(Java语言规范,Java SE 7版,第15.12.4.2节)所有参数都是从左到右进行评估(不同于其他语言,其中评估的顺序是未定义的),因此执行顺序是:
b
以便作为函数的第一个参数传递b = a
,并将结果(新值b
)作为函数的第二个参数传递b
并忽略其新值a
temp
.该参数x
可以工作temp
,但它看起来更干净,因为您定义了一次该函数,您可以在任何地方使用它.String a="one";
String b="two";
a = a.concat("#" + b);
b = a.split("#")[0];
a = a.split("#")[1];
Run Code Online (Sandbox Code Playgroud)
只要您的字符串中不包含#字符,这将起作用.随意使用任何其他角色.
您可以使用可能的Unicode字符,例如"\ u001E"而不是#.
干得好。尝试这个:
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);
Run Code Online (Sandbox Code Playgroud)
将任何值作为变量中的字符串。将会是交换。
归档时间: |
|
查看次数: |
55421 次 |
最近记录: |