2009-06-05 19 views

risposta

1

String.replaceAll() o replaceFirst()

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

Link alle JavaDocs String API

+0

Questo presuppone che si conosceranno i caratteri da scambiare prima del tempo, il che non sembra una soluzione utilizzabile nella maggior parte dei casi. –

23

'In' una stringa, non puoi. Le stringhe sono immutabili. È possibile creare facilmente una seconda stringa con:

+23

Mi piace l'aspetto della tua espressione regolare. – JeeBee

+2

lol, mi piace questa risposta. – didxga

42

Dal String oggetti sono immutabili, di andare a un char[] via toCharArray, scambiando i caratteri, quindi facendo una nuova String dal char[] attraverso il String(char[]) costruttore avrebbe funzionato.

L'esempio seguente scambia il primo e secondo caratteri:

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

Risultato:

abcde 
bacde 
+2

Bello.Non sono sicuro del motivo per cui sono andato direttamente a StringBuilder invece di pensare a un array di caratteri. –

+0

@Jon Skeet: il mio primo pensiero è stato in realtà quello di creare una nuova stringa, ma poiché i requisiti erano uno scambio, ho pensato che l'array di caratteri sarebbe stato più semplice. :) – coobird

+1

Array, così vecchio stile !!! – jjnguy

2

String.toCharArray() vi darà un array di caratteri che rappresentano questa stringa.

È possibile modificare questo senza modificare la stringa originale (scambiare eventuali caratteri necessari) e quindi creare una nuova stringa utilizzando String(char[]).

Si noti che le stringhe sono immutable, quindi è necessario creare un nuovo oggetto stringa.

6

Questo è stato risposto un paio di volte, ma qui è più uno solo per divertimento :-)

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

Ecco java codice di esempio per lo scambio di caratteri Java in modo ricorsivo .. È possibile ottenere il codice di esempio completo al 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

Invertire una stringa non è la stessa cosa di scambiare due caratteri ... –

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

Ecco una soluzione con un StringBuilder. Supporta il riempimento di stringhe risultanti con una lunghezza di stringa non uniforme con un carattere di riempimento. Come hai intuito, questo metodo è realizzato per lo swap esadecimale-nibble.

/** 
* 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

penso che questo dovrebbe aiutare.

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); // scambierà i primi due caratteri nella stringa

+0

Per favore aggiungi anche qualche spiegazione, non solo una riga di codice? –

+0

Questo produce un risultato completamente sbagliato. Suggerimento: gli operatori computazionali di eguale precedenza sono lasciati associativi in ​​Java, come in quasi tutti i linguaggi di programmazione di sempre. –

+0

// puoi farlo ... Suggerimento: quel codice funziona nel caso in cui la lunghezza della stringa sia maggiore di 2 >>>>>>>> >>>>>>>>>>>>>>> pacchetto to.pkgtry; import java.util.Scanner; classe pubblica 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) { String s = swap ("abcg"); System.out.println (s); } } –

Problemi correlati