it-swarm.com.de

Wie kann man Zeichenketten in Java austauschen?

Wie kann ich zwei Zeichen in einer String tauschen? Beispiel: "abcde" wird "bacde".

24
user107023

Da String-Objekte unveränderlich sind, können Sie über toCharArray zu einem char[] wechseln, die Zeichen vertauschen und dann eine neue String aus char[] über den Konstruktor String(char[]) erstellen.

Das folgende Beispiel tauscht das erste und das zweite Zeichen aus:

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

Ergebnis:

abcde
bacde
45
coobird

'In' eine Schnur, du kannst nicht. Strings sind unveränderlich. Sie können leicht eine zweite Zeichenfolge erstellen mit:

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

Dies wurde ein paar Mal beantwortet, aber hier ist noch einer zum Spaß :-)

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 () gibt Ihnen ein Array von Zeichen, die diese Zeichenfolge darstellen.

Sie können dies ändern, ohne die ursprüngliche Zeichenfolge zu ändern (tauschen Sie die gewünschten Zeichen aus) und erstellen Sie dann eine neue Zeichenfolge mit String (char []) .

Beachten Sie, dass die Zeichenfolgen unveränderlich sind. Sie müssen also ein neues Zeichenfolgenobjekt erstellen.

2
Brian Agnew

String.replaceAll () oder replaceFirst ()

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

Link zu den JavaDocs String API

1
AgileJon

Hier ist Java-Beispielcode zum rekursiven Austauschen von Java-Zeichen. Den vollständigen Beispielcode erhalten Sie unter 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

Hier ist eine Lösung mit einer StringBuilder. Es unterstützt das Auffüllen von resultierenden Saiten mit ungleichmäßiger Saitenlänge mit einem Auffüllzeichen. Wie Sie sich schon gedacht haben, ist diese Methode für das Hexadezimal-Nibble-Swapping gedacht.

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

Ich denke das sollte helfen.

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

// Dies ist eine sehr einfache Methode, wie Sie eine Saite alphanumerisch bestellen können. Dies macht nichts Besonderes und eignet sich hervorragend für den Schulgebrauch

paket string_sorter;

öffentliche Klasse 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