valores - Cómo intercambiar dos variables de cadena en Java sin usar una tercera variable
uso de variable auxiliar en java (15)
¿Cómo puedo intercambiar dos variables de cadena en Java sin utilizar una tercera variable, es decir, la variable temporal?
String a = "one"
String b = "two"
String temp = null;
temp = a;
a = b;
b = temp;
Pero aquí hay una tercera variable. Necesitamos eliminar el uso de la tercera variable.
// tomado de esta respuesta: https://.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;
Esto funciona porque el lenguaje Java garantiza (Java Language Specification, Java SE 7 Edition, sección 15.12.4.2) que todos los argumentos se evalúan de izquierda a derecha (a diferencia de otros idiomas, donde el orden de evaluación no está definido), por lo que el orden de ejecución es:
- El valor original de
b
se evalúa para ser pasado como el primer argumento a la función - La expresión
b = a
se evalúa y el resultado (el nuevo valor deb
) se pasa como el segundo argumento de la función. - La función se ejecuta, devolviendo el valor original de
b
e ignorando su nuevo valor - Asignando el resultado a
a
- Ahora los valores se han intercambiado y no es necesario declarar
temp
. El parámetrox
funciona comotemp
, pero se ve más limpio porque define la función una vez y puede usarla en todas partes.
Aqui tienes. Prueba esto:
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);
Toma cualquier valor como una cadena en una variable. Será permuta.
Hazlo así sin usar una tercera 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);
La forma más sencilla se da a continuación:
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);
Para cuerdas:
String a = "one"
String b = "two"
a = a + b;
b = a.replace(b, "");
a = a.replace(b, "");
Para el Método de Cuerda 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étodo 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);
}
}
Para enteros
clase pública 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);
}
}
Puedes hacerlo de esta manera.
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);
}
paquete com.core;
clase pública 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);
}
}
La solución de Jj Tuibeo funciona si agrega replaceFirst () y usa una expresión regular :
a += b;
b = a.replaceFirst(b + "$", "");
a = a.replaceFirst("^" + b, "");
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);
}
}
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);
}
}
String a="one";
String b="two";
a = a.concat("#" + b);
b = a.split("#")[0];
a = a.split("#")[1];
Esto funcionará siempre que su cadena no contenga el carácter # en ellos. Siéntete libre de usar cualquier otro personaje en su lugar.
Podría usar un posible carácter Unicode, como "/ u001E" en lugar de #.
String name = "george";
String name2 = "mark";
System.out.println(name+" "+name2);
System.out.println(name.substring(name.length()) + name2 + " "+ name );
Aquí subcadena (); método devuelve cadena vacía. Por lo tanto, los nombres pueden ser agregados.
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);
En realidad, el código en su pregunta no cambió la cadena a, b.
Debería ver este problema: intercambie dos cadenas en Java, pasándolas a una función de utilidad, pero sin devolver objetos o usar clases de envoltura
Y Java está pasando por valor: ¿es Java "paso por referencia" o "paso por valor"?