it-swarm.com.de

Wie Sie zwei String-Variablen in Java austauschen, ohne eine dritte Variable zu verwenden

Wie kann ich zwei String-Variablen in Java austauschen, ohne eine dritte Variable zu verwenden, d. H. Die temporäre Variable?

String a = "one"
String b = "two"
String temp = null;
temp = a;
a = b;
b = temp;

Aber hier gibt es eine dritte Variable. Wir müssen die Verwendung der dritten Variablen beseitigen.

19
user1281029

Machen Sie es so, ohne eine dritte Variable zu verwenden:

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);
33
Ankur Lathi

// aus dieser Antwort entnommen: 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;

Dies funktioniert, weil die Java-Sprache (Java-Sprachspezifikation, Java SE 7 Edition, Abschnitt 15.12.4.2) garantiert, dass alle Argumente von links nach rechts ausgewertet werden (im Gegensatz zu anderen Sprachen, bei denen die Reihenfolge der Auswertung undefiniert ist), also der Ausführungsreihenfolge ist:

  1. Der ursprüngliche Wert von b wird ausgewertet, um als erstes Argument an die Funktion übergeben zu werden
  2. Der Ausdruck b = a wird ausgewertet und das Ergebnis (der neue Wert von b) wird als zweites Argument an die Funktion übergeben
  3. Die Funktion führt den ursprünglichen Wert von b aus und ignoriert den neuen Wert
  4. Sie geben das Ergebnis an a.
  5. Nun wurden die Werte ausgetauscht und Sie mussten keine temp deklarieren. Der Parameter x arbeitet als temp, sieht aber sauberer aus, da Sie die Funktion einmal definieren und überall verwenden können.
12
marcus
String a="one";
String b="two";

a = a.concat("#" + b);
b = a.split("#")[0];
a = a.split("#")[1];

Dies funktioniert, solange Ihre Zeichenfolge das Zeichen # nicht enthält. Fühlen Sie sich frei, stattdessen einen anderen Charakter zu verwenden.

Sie könnten ein mögliches Unicode-Zeichen wie "\ u001E" anstelle von # verwenden.

6
Husman
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);


    }

}
2
Couchcamote
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);
1
Nirav Dhinoja

Die Lösung von Jj Tuibeo funktioniert, wenn Sie replaceFirst () hinzufügen und einen regulären Ausdruck verwenden: :

a += b;
b = a.replaceFirst(b + "$", "");
a = a.replaceFirst("^" + b, "");
0
troy
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);
0
Inderjeet

Bitte schön. Versuche dies:

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);

Nimm einen beliebigen Wert als Zeichenfolge in einer Variablen. Es wird getauscht.

0
commit

Das kannst du so machen.

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);

    }
0
Aishu

Der einfachste Weg ist unten angegeben:

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);
0
armysheng
String name = "george";
String name2 = "mark";
System.out.println(name+" "+name2);
System.out.println(name.substring(name.length()) + name2 +  " "+ name );

Hier substring (); Methode gibt leere Zeichenfolge zurück. Daher können Namen angehängt werden. 

0
Rahul Pyasi

paket com.core;

öffentliche Klasse 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);

}

}

0
Aaftab Alam

Für String Methode 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);

}
}

Methode 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);
  }
}

Für ganze Zahlen

öffentliche Klasse 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);
}
}
0
Krishnamoorthy