3 番目の変数、つまり temp 変数を使用せずに、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/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;
これが機能するのは、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 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);
Jj Tuibeo のソリューションは、replaceFirst() を追加して正規表現を使用すると機能します。
a += b;
b = a.replaceFirst(b + "$", "");
a = a.replaceFirst("^" + b, "");
誰かがこのスレッドを調べた場合に備えて、指摘したいと思います。3 番目の変数を使用せずに 2 つの文字列を交換する方法はありません。Java の例では、文字列は不変であるため、a=a+b は 3 番目の文字列を作成し、a を再割り当てしません。reverseString を実行すると、新しい変数が作成されますが、今回はプログラムが新しいスコープに入るため、スタック フレームに作成されます。Xor スワッピングの使用は機能する可能性がありますが、文字列は Java では不変であるため、xor スワップも一時変数を作成します。実際、言語で同じメモリ空間に再割り当てできない限り、新しい変数を作成せずに文字列を交換することはできません。
文字列の場合:
String a = "one"
String b = "two"
a = a + b;
b = a.replace(b, "");
a = a.replace(b, "");