web-dev-qa-db-fra.com

Comment échanger des caractères de chaîne en Java?

Comment puis-je échanger deux caractères dans une String? Par exemple, "abcde" deviendra "bacde".

24
user107023

Puisque les objets String sont immuables, aller à un char[] via toCharArray , échanger les caractères, puis créer une nouvelle String à partir de char[] via le constructeur String(char[]) fonctionnerait.

L'exemple suivant permute 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
45
coobird

"Dans" une chaîne, vous ne pouvez pas. Les cordes sont immuables. Vous pouvez facilement créer une seconde chaîne avec:

 String second = first.replaceFirst("(.)(.)", "$2$1");
26
toolkit

Ceci a été répondu à quelques reprises mais en voici un de plus 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();
    }
}
6
kphonik
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);
}
4
Russell
StringBuilder sb = new StringBuilder("abcde");
    sb.setCharAt(0, 'b');
    sb.setCharAt(1, 'a');
    String newString = sb.toString();
2
Andrey

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

Vous pouvez modifier cela sans changer la chaîne d'origine (remplacez les caractères souhaités), puis créez une nouvelle chaîne à l'aide de String (char []) .

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

2
Brian Agnew

String.replaceAll () ou replaceFirst ()

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

Lien vers les JavaDocs String API

1
AgileJon

Voici un exemple de code Java permettant d’échanger des caractères Java de manière récursive. Vous pouvez obtenir un exemple complet de code à l’adresse 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;
    }
}
1
Java2novice
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);

    }
}
0
Prem

Voici une solution avec une StringBuilder. Il supporte 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 conçue pour l'échange de grignotage 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
Markus L
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
JúlioCézar

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)));
  }
}
0
Abhay_maniyar

// c’est un moyen très simple de commander une chaîne en alpha, cela n’utilise rien d’extraordinaire et est idéal pour une utilisation scolaire.

package string_sorter;

classe publique String_Sorter {

/**
 * @param args the command line arguments
 */
public static void main(String[] args) {

    String Word = "jihgfedcba";
    for (int endOfString = Word.length(); endOfString > 0; endOfString--) {

        int largestWord = Word.charAt(0);
        int location = 0;
        for (int index = 0; index < endOfString; index++) {

            if (Word.charAt(index) > largestWord) {

                largestWord = Word.charAt(index);
                location = index;
            }
        }

        if (location < endOfString - 1) {

            String newString = Word.substring(0, location) + Word.charAt(endOfString - 1) + Word.substring(location + 1, endOfString - 1) + Word.charAt(location);
            Word = newString;
        }
        System.out.println(Word);
    }

    System.out.println(Word);
}

}

0
Archie