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

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

23
demandé sur Coral Doe 2009-06-05 18:35:36

13 réponses

Depuis String les objets sont immuables, allant à un char[] par toCharArray, en changeant les caractères, puis en faisant un nouveau Stringchar[] via le String(char[]) le constructeur fonctionnerait.

l'exemple suivant échange 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
44
répondu coobird 2012-03-18 06:47:25

"Dans" une chaîne de caractères, vous ne pouvez pas. Les cordes sont immuables. Vous pouvez facilement créer une deuxième chaîne avec:

 String second = first.replaceFirst("(.)(.)", "");
25
répondu toolkit 2009-06-05 14:38:05

ceci a été répondu quelques fois mais en voici un autre 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();
    }
}
6
répondu 2009-06-05 20:02:44
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);
}
3
répondu Russell 2015-10-10 03:10:46

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

vous pouvez modifier ceci sans changer la chaîne de caractères d'origine (changer tous les caractères dont vous avez besoin), puis créer une nouvelle chaîne de caractères en utilisant String (char []).

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

2
répondu Brian Agnew 2009-06-05 14:40:14
StringBuilder sb = new StringBuilder("abcde");
    sb.setCharAt(0, 'b');
    sb.setCharAt(1, 'a');
    String newString = sb.toString();
2
répondu Andrey 2014-03-30 14:02:54

Chaîne de caractères.replaceAll() ou replaceFirst()

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

Lien vers la documentation Javadoc API String

1
répondu AgileJon 2009-06-05 14:37:06

voici un exemple de code java pour échanger des caractères java de façon récursive.. Vous pouvez obtenir le code d'é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;
    }
}
1
répondu Java2novice 2012-07-24 17:15:18
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
répondu Prem 2013-09-12 09:41:06

Voici une solution avec un StringBuilder. Il supporte le rembourrage des cordes résultantes avec une longueur de corde inégale avec un caractère de rembourrage. Comme vous l'avez deviné, cette méthode est faite pour hexadécimal-grignoter-échange.

/**
 * 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
répondu Markus L 2015-10-15 11:32:20
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
répondu JúlioCézar 2016-04-04 22:56:00

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
répondu Abhay_maniyar 2016-07-25 07:26:07

return str.charAt (1) + str.charAt (0) + str.substring (2); / / va permuter les deux premiers caractères dans string

-2
répondu Esraa Hammad 2016-08-21 13:42:53