Comment permuter 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.
Faites-le comme ceci sans utiliser 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);
// extrait 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 car le langage Java garantit (spécification du langage Java, édition 7 de Java SE 7, paragraphe 15.12.4.2) que tous les arguments sont évalués de gauche à droite (contrairement à certains autres langages, où l’évaluation n’est pas définie), de sorte que est:
b
est évaluée afin d'être passée en tant que premier argument à la fonctionb = a
est évaluée et le résultat (la nouvelle valeur de b
) est passé en tant que deuxième argument de la fonction.b
et en ignorant sa nouvelle valeur.a
temp
. Le paramètre x
fonctionne comme temp
, mais il semble plus propre car vous définissez la fonction une fois et vous pouvez l'utiliser partout.String a="one";
String b="two";
a = a.concat("#" + b);
b = a.split("#")[0];
a = a.split("#")[1];
Cela fonctionnera tant que votre chaîne ne contiendra pas le caractère #. N'hésitez pas à utiliser n'importe quel autre caractère à la place.
Vous pouvez utiliser un caractère Unicode possible, tel que "\ u001E" à la place du #.
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);
(Solution de Jj Tuibeo } _ fonctionne si vous ajoutez replaceFirst () et utilisez un expression régulière :
a += b;
b = a.replaceFirst(b + "$", "");
a = a.replaceFirst("^" + b, "");
Voici. Essaye ça:
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);
Prenez n'importe quelle valeur sous forme de chaîne dans une variable. Ce sera l'échange.
Vous pouvez 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);
}
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);
En fait, le code de votre question n'a pas échangé les chaînes a, b.
Vous devriez voir ce problème: Permutez deux chaînes en Java en les passant à une fonction d’utilitaire, mais sans renvoyer d’objets ni utiliser de classes wrapper
Et Java passe par valeur: Java est-il "passe-à-référence" ou "passe-à-valeur"?
String name = "george";
String name2 = "mark";
System.out.println(name+" "+name2);
System.out.println(name.substring(name.length()) + name2 + " "+ name );
Ici la sous-chaîne (); La méthode retourne une chaîne vide. par conséquent, les noms peuvent être ajoutés.
package com.core;
classe publique 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);
}
}
Pour String 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
classe publique 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);
}
}