Comment échanger deux variables de chaîne en Java sans utiliser une troisième variable

comment échanger deux variables de chaîne en Java sans utiliser une troisième variable, c'est-à-dire la variable temp?

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

mais ici il y a une troisième variable. Nous devons éliminer l'utilisation de la troisième variable.

19
demandé sur Peter Mortensen 2013-08-30 12:49:45

15 réponses

le Faire comme ça, sans l'aide d'une troisième 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);
32
répondu Ankur Lathi 2016-09-16 02:46:42

// prises de cette réponse: 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;

cela fonctionne parce que le langage Java garantit (Java Language Specification, Java SE 7 Edition, section 15.12.4.2) que tous les arguments sont évalués de gauche à droite (contrairement à d'autres langues, où l'ordre d'évaluation n'est pas défini), donc l'ordre d'exécution est:

  1. la valeur originale de b est évalué pour être passé comme le le premier argument de la fonction
  2. b = a est évaluée et le résultat (la nouvelle valeur de b) est passé comme deuxième argument de la fonction
  3. la fonction s'exécute, retournant la valeur originale de b et en ignorant sa nouvelle valeur
  4. Vous assing le résultat de a
  5. maintenant les valeurs ont été échangées et vous n'aviez pas besoin de déclarer temp. Le paramètre xtemp, mais il a l'air plus propre parce que vous définir la fonction une fois et vous pouvez l'utiliser partout.
11
répondu marcus 2017-05-23 11:47:11
String a="one";
String b="two";

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

Cela fonctionne aussi longtemps que votre chaîne ne contient pas le caractère#. N'hésitez pas à utiliser un autre caractère à la place.

Vous pouvez utiliser un caractère Unicode possible, comme "\u001E" au lieu du #.

6
répondu Husman 2016-09-16 02:45:52
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
répondu Couchcamote 2014-06-18 06:23:21
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
répondu Nirav Dhinoja 2016-01-27 13:22:30

Ici vous allez. Essayez ceci:

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

prendre n'importe quelle valeur comme chaîne dans une variable. Il sera swap.

0
répondu commit 2016-09-16 02:44:36

la manière la plus simple est donnée ci-dessous:

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
répondu Praveen P Moolekandathil 2016-09-16 02:47:36
0
répondu armysheng 2017-05-23 12:17:57

la solution de JJ Tuibeo fonctionne si vous ajoutez replaceFirst() et utiliser un expression régulière:

a += b;
b = a.replaceFirst(b + "$", "");
a = a.replaceFirst("^" + b, "");
0
répondu troy 2017-05-23 12:02:23

Pour La Chaîne Méthode 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);

}
}

Méthode 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);
  }
}

Pour Les Entiers

public class Swap without Thirdvar {

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
répondu Krishnamoorthy 2017-06-09 06:31:53

Vous pouvez le faire de cette façon.

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
répondu Aishu 2018-03-23 06:50:09

package com.core;

public class 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
répondu Aaftab Alam 2018-04-13 06:14:19
String name = "george";
String name2 = "mark";
System.out.println(name+" "+name2);
System.out.println(name.substring(name.length()) + name2 +  " "+ name );

ici substring (); la méthode renvoie la chaîne vide. par conséquent , les noms peuvent être ajoutés.

0
répondu Rahul Pyasi 2018-05-16 12:31:14

Pour les chaînes:

String a = "one"
String b = "two"

a = a + b;
b = a.replace(b, "");
a = a.replace(b, "");
-1
répondu Jj Tuibeo 2016-09-16 02:51:31
public class ex{
    public static void main(String[] args){

        String s1="abc";
        String s2="def";

        System.out.println(s1);
        System.out.println(s2);

        s3=s2.replaceAll(s1,s2=s1);

        System.out.println(s1);
        System.out.println(s2);

    }
}
-1
répondu sandeep kumar sahoo 2018-02-24 13:42:23