Как поменять строковые символы в Java? - PullRequest
25 голосов
/ 05 июня 2009

Как мне поменять два символа в String? Например, "abcde" станет "bacde".

Ответы [ 14 ]

46 голосов
/ 05 июня 2009

Так как String объекты являются неизменяемыми, они переходят на char[] через toCharArray, меняя символы, затем создавая новый String из char[] через String(char[]) конструктор будет работать.

В следующем примере меняются первый и второй символы:

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

Результат:

abcde
bacde
27 голосов
/ 05 июня 2009

'В' строку, вы не можете. Строки неизменны. Вы можете легко создать вторую строку с помощью:

 String second = first.replaceFirst("(.)(.)", "$2$1");
6 голосов
/ 06 июня 2009

На этот вопрос уже отвечали несколько раз, но вот еще один для развлечения: -)

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();
    }
}
4 голосов
/ 10 октября 2015
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 голосов
/ 30 марта 2014
StringBuilder sb = new StringBuilder("abcde");
    sb.setCharAt(0, 'b');
    sb.setCharAt(1, 'a');
    String newString = sb.toString();
2 голосов
/ 05 июня 2009

String.toCharArray () выдаст вам массив символов, представляющих эту строку.

Вы можете изменить это, не изменяя исходную строку (поменяйте местами любые необходимые символы), а затем создайте новую строку, используя String (char []) .

Обратите внимание, что строки неизменны , поэтому вам необходимо создать новый строковый объект.

1 голос
/ 24 июля 2012

Вот пример кода Java для рекурсивного обмена символами Java. Полный пример кода можно получить по адресу 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;
    }
}
0 голосов
/ 28 декабря 2018

// это очень простой способ заказа строки в алфавитном порядке, здесь не нужно ничего необычного и отлично подходит для школьного использования

пакет string_sorter;

открытый класс 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 голосов
/ 21 августа 2016

return str.charAt (1) + str.charAt (0) + str.substring (2); // поменяем первые два символа в строке

0 голосов
/ 25 июля 2016

Я думаю, это должно помочь.

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