3番目の変数、つまり一時変数を使用せずに、Javaの2つの文字列変数を交換するにはどうすればよいですか?
String a = "one"
String b = "two"
String temp = null;
temp = a;
a = b;
b = temp;
しかし、ここには3番目の変数があります。 3番目の変数の使用を排除する必要があります。
3番目の変数を使用せずに次のようにします。
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);
//この回答から引用: https://stackoverflow.com/a/16826296/42741
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;
これは、Java言語保証(Java言語仕様、Java SE 7 Edition、セクション15.12.4.2)がすべての引数が左から右に評価されること(評価の順序が定義されていない他の言語とは異なり、実行順序は次のとおりです。
b
の元の値は、関数の最初の引数として渡されるために評価されますb = a
が評価され、結果(b
の新しい値)が関数の2番目の引数として渡されますb
の元の値を返し、その新しい値を無視しますa
に結果を要求しますtemp
を宣言する必要がなくなりました。パラメーターx
はtemp
として機能しますが、関数を一度定義すればどこでも使用できるため、よりきれいに見えます。String a="one";
String b="two";
a = a.concat("#" + b);
b = a.split("#")[0];
a = a.split("#")[1];
これは、文字列に#文字が含まれていない限り機能します。代わりに他のキャラクターを自由に使用してください。
#の代わりに「\ u001E」のようなUnicode文字を使用できます。
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);
}
}
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);
Jj Tuibeoのソリューション は、replaceFirst()を追加して 正規表現 を使用すると機能します。
a += b;
b = a.replaceFirst(b + "$", "");
a = a.replaceFirst("^" + b, "");
String a = "one";//creates "one" object on heap
String b = "two";// creates "two" object on heap
System.out.printf("a is %s , b is %s%n",a,b);
a = "two";// will not create new "two" object & now a is pointing to "two" object
b = "one";// will not create new "one" object & now b is pointing to "one" object
System.out.printf("a is %s , b is %s%n",a,b);
どうぞ。これを試して:
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);
変数の文字列として任意の値を取ります。スワップになります。
この方法でできます。
public static void main(String[] args) {
// TODO Auto-generated method stub
String a = "one";
String b = "two";
System.out.println(a);
System.out.println(b);
a = a+b;
b = "";
System.out.println("*************");
b = a.substring(0, 3);
a = a.substring(3, 6);
System.out.println(a);
System.out.println(b);
}
最も簡単な方法を以下に示します。
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);
実際、質問のコードは文字列a、bを交換しませんでした。
この問題が表示されるはずです:Javaの2つの文字列をユーティリティ関数に渡すことで交換しますが、オブジェクトを返さず、ラッパークラスを使用しません
そしてJavaは値で渡します:Is Java "pass-by-reference"または "pass -by-value "?
String name = "george";
String name2 = "mark";
System.out.println(name+" "+name2);
System.out.println(name.substring(name.length()) + name2 + " "+ name );
ここでsubstring();メソッドは空の文字列を返します。したがって、名前を追加できます。
パッケージcom.core;
パブリッククラスSwappingNoTemp {
public static void main(String[] args) {
String a = "Java";
String b = "c";
a = a + b;
b = a.substring(0, a.length() - b.length());
a = a.substring(b.length());
System.out.println("swapping is a.." + a);
System.out.println("swapping is b.." + b);
}
}
文字列方法1の場合:
public class SwapWithoutThirdVar{
public static void main (String args[]){
String s1 ="one";
String s2 ="two";
s1= s1+s2;
s2 = s1.substring(0,(s1.length()-s2.length()));
s1 = s1.substring(s2.length());
System.out.println("s1 == "+ s1);
System.out.println("s2 == "+ s2);
}
}
方法2:
public class SwapWithoutThirdVar
{
public static void main (String[] args) throws Java.lang.Exception
{
String s1 = "one";
String s2 ="two";
s1=s2+s1;
s2=s1.replace(s2,"");
s1=s1.replace(s2,"");
System.out.println("S1 : "+s1);
System.out.println("S2 : "+s2);
}
}
整数の場合
パブリッククラスSwapWithoutThirdVar {
public static void main(String a[]){
int x = 10;
int y = 20;
x = x+y;
y=x-y;
x=x-y;
System.out.println("After swap:");
System.out.println("x value: "+x);
System.out.println("y value: "+y);
}
}