2009-06-05 9 views

Répondre

1

String.replaceAll() ou replaceFirst()

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

Lien vers les JavaDocs String API

+0

Ceci supposait que vous connaîtriez les caractères à échanger à l'avance, ce qui ne semble pas être une solution utilisable dans la plupart des cas. –

23

'In' une chaîne, vous ne pouvez pas. Les chaînes sont immuables. Vous pouvez facilement créer une deuxième chaîne avec:

+23

J'aime le look de votre expression régulière. – JeeBee

+2

lol, j'aime cette réponse. – didxga

42

Depuis String objets sont immuables, aller à un char[] via toCharArray, en échangeant les personnages, puis faire une nouvelle String de char[] par le constructeur String(char[]) fonctionnerait.

L'exemple suivant intervertit les premier et deuxième caractères:

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

Résultat:

abcde 
bacde 
+2

Nice.Je ne sais pas pourquoi je suis allé directement à StringBuilder au lieu de penser à un tableau char. –

+0

@Jon Skeet: Ma première pensée était en fait de construire une nouvelle chaîne, mais comme les exigences étaient un échange, je pensais que le tableau char serait plus facile. :) – coobird

+1

Arrays, tellement démodé !!! – jjnguy

2

String.toCharArray() vous donnera un tableau de caractères représentant cette chaîne.

Vous pouvez modifier cela sans modifier la chaîne d'origine (permuter les caractères de votre choix), puis créer une nouvelle chaîne à l'aide de String(char[]).

Notez que les chaînes sont immutables, vous devez donc créer un nouvel objet chaîne.

6

Cela a été répondu à quelques reprises, mais en voici un plus juste pour le plaisir :-)

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

Voici un exemple de code java pour échanger les caractères java récursive .. Vous pouvez obtenir le code de l'échantillon complet à 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

Inverser une chaîne n'est pas la même chose que d'échanger deux caractères ... –

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

Voici une solution avec un StringBuilder. Il prend en charge le remplissage des chaînes résultantes avec une longueur de chaîne inégale avec un caractère de remplissage. Comme vous l'avez deviné, cette méthode est faite pour le swap hexadécimal.

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

Je pense que cela devrait aider.

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); // échangera les deux premiers caractères de la chaîne

+0

Veuillez ajouter quelques explications, pas seulement une ligne de code? –

+0

Cela produit un résultat complètement faux. Astuce: les opérateurs de calcul de priorité égale sont laissés associatifs en Java, comme dans presque tous les langages de programmation. –

+0

// vous pouvez le faire ... Astuce: ce code fonctionne dans le cas Longueur de la chaîne supérieure à 2 >>>>>>>> >>>>>>>>>>>>>>> package to.pkgtry; import java.util.Scanner; public class ToTry { public statique Chaîne swap (Chaîne str) { Chaîne ret = "" + str.charAt (1) + str.charAt (0) + str.substring (2); return ret; Public static void principal (String [] args) { Chaîne s = swap ("abcg"); System.out.println (s); } } –

Questions connexes