2009-06-05 16 views

Respuesta

1

String.replaceAll() o replaceFirst()

String s = "abcde".replaceAll("ab", "ba") 

Enlace a las JavaDocs String API

+0

Esto supone que conocerá los caracteres que se intercambiarán con anterioridad, lo que no parece ser una solución utilizable en la mayoría de los casos. –

23

'en' una cadena, no puedes. Las cadenas son inmutables. Usted puede crear fácilmente una segunda cadena con:

+23

Me gusta el aspecto de su expresión regular. – JeeBee

+2

lol, me gusta esta respuesta. – didxga

42

Desde String objetos son inmutables, ir a un char[] través toCharArray, intercambiando los personajes, a continuación, hacer un nuevo String de char[] a través de la String(char[]) constructor iba a funcionar.

el siguiente ejemplo se intercambia el primer y segundo caracteres:

String originalString = "abcde"; 

char[] c = originalString.toCharArray(); 

// Replace with a "swap" function, if desired: 
char temp = c[0]; 
c[0] = c[1]; 
c[1] = temp; 

String swappedString = new String(c); 

System.out.println(originalString); 
System.out.println(swappedString); 

Resultado:

abcde 
bacde 
+2

Agradable.No estoy seguro de por qué fui directamente a StringBuilder en lugar de pensar en una matriz de caracteres. –

+0

@Jon Skeet: Mi primer pensamiento fue construir un nuevo String, pero como los requisitos eran un intercambio, pensé que el conjunto de caracteres sería más fácil. :) – coobird

+1

Arrays, tan anticuado! – jjnguy

2

String.toCharArray() le dará una serie de personajes que representan a esta cadena.

Puede cambiar esto sin cambiar la cadena original (intercambie los caracteres que necesite), y luego cree una nueva cadena usando String(char[]).

Tenga en cuenta que las cadenas son inmutables, por lo que debe crear un nuevo objeto de cadena.

6

Esto ha sido contestada algunas veces, pero aquí hay uno más justo para la diversión :-)

public class Tmp { 
    public static void main(String[] args) { 
     System.out.println(swapChars("abcde", 0, 1)); 
    } 
    private static String swapChars(String str, int lIdx, int rIdx) { 
     StringBuilder sb = new StringBuilder(str); 
     char l = sb.charAt(lIdx), r = sb.charAt(rIdx); 
     sb.setCharAt(lIdx, r); 
     sb.setCharAt(rIdx, l); 
     return sb.toString(); 
    } 
} 
0

Aquí es código de ejemplo java para el intercambio de caracteres Java de forma recursiva .. Usted puede obtener código de ejemplo completo en http://java2novice.com/java-interview-programs/string-reverse-recursive/

public String reverseString(String str){ 

    if(str.length() == 1){ 
     return str; 
    } else { 
     reverse += str.charAt(str.length()-1) 
       +reverseString(str.substring(0,str.length()-1)); 
     return reverse; 
    } 
} 
+3

Invertir una cadena no es lo mismo que intercambiar dos caracteres ... –

0
import java.io.*; 
class swaping 
{ 
    public static void main(String args[]) 
    { 
     String name="premkumarg"; 
     int len=name.length(); 
     char[] c = name.toCharArray(); 
     for(int i=0;i<len-1;i=i+2) 
     { 
      char temp= c[i]; 
      c[i]=c[i+1]; 
      c[i+1]=temp; 
     } 

     System.out.println("Swapping string is: "); 
     System.out.println(c); 

    } 
} 
2
StringBuilder sb = new StringBuilder("abcde"); 
    sb.setCharAt(0, 'b'); 
    sb.setCharAt(1, 'a'); 
    String newString = sb.toString(); 
3
static String string_swap(String str, int x, int y) 
{ 

    if(x < 0 || x >= str.length() || y < 0 || y >= str.length()) 
    return "Invalid index"; 

    char arr[] = str.toCharArray(); 
    char tmp = arr[x]; 
    arr[x] = arr[y]; 
    arr[y] = tmp; 

    return new String(arr); 
} 
0

Aquí hay una solución con StringBuilder. Admite el relleno de cadenas resultantes con una longitud de cuerda desigual con un carácter de relleno. Como ya has adivinado, este método está hecho para hexadecimal-nibble-swapping.

/** 
* Swaps every character at position i with the character at position i + 1 in the given 
* string. 
*/ 
public static String swapCharacters(final String value, final boolean padding) 
{ 
    if (value == null) 
    { 
     return null; 
    } 

    final StringBuilder stringBuilder = new StringBuilder(); 
    int posA = 0; 
    int posB = 1; 
    final char padChar = 'F'; 

    // swap characters 
    while (posA < value.length() && posB < value.length()) 
    { 
     stringBuilder.append(value.charAt(posB)).append(value.charAt(posA)); 
     posA += 2; 
     posB += 2; 
    } 

    // if resulting string is still smaller than original string we missed the last 
    // character 
    if (stringBuilder.length() < value.length()) 
    { 
     stringBuilder.append(value.charAt(posA)); 
    } 

    // add the padding character for uneven strings 
    if (padding && value.length() % 2 != 0) 
    { 
     stringBuilder.append(padChar); 
    } 

    return stringBuilder.toString(); 
} 
0
public static String shuffle(String s) { 
    List<String> letters = Arrays.asList(s.split("")); 
    Collections.shuffle(letters); 
    StringBuilder t = new StringBuilder(s.length()); 
    for (String k : letters) { 
     t.append(k); 
    } 
    return t.toString(); 
} 
0

creo que esto debería ayudar.

import java.util.*; 

public class StringSwap{ 

public static void main(String ar[]){ 
    Scanner in = new Scanner(System.in); 
    String s = in.next(); 
    System.out.println(new StringBuffer(s.substring(0,2)).reverse().toString().concat(s.substring(2))); 
    } 
} 
-2

return str.charAt (1) + str.charAt (0) + str.substring (2); // intercambiará los dos primeros caracteres en la cadena

+0

Agregue también algunas explicaciones, ¿no solo una línea de código? –

+0

Esto produce un resultado completamente incorrecto. Sugerencia: los operadores computacionales de igual precedencia se dejan asociativos en Java, como en casi todos los lenguajes de programación. –

+0

// puede hacerlo ... Sugerencia: ese código funciona en caso de que la cadena tenga una longitud mayor a 2 >>>>>>>> >>>>>>>>>>>>>>> paquete a.pkgtry; import java.util.Scanner; clase pública ToTry { public static String swap (String str) { String ret = "" + str.charAt (1) + str.charAt (0) + str.substring (2); return ret; } public static void main (String [] args) { Cadena s = swap ("abcg"); System.out.println (s); } } –

Cuestiones relacionadas