Как поменять местами числа в строке?

Например, если у меня есть строка, содержащая 5, 4, 3, 2, 1, как мне сделать так, чтобы новая строка или как распечатать 1, 2, 3, 4, 5? Спасибо.


person Programmermatt    schedule 28.09.2012    source источник
comment
Читайте с одного конца источника и записывайте на противоположный конец цели.   -  person Hot Licks    schedule 28.09.2012
comment
В Java API нет встроенной функции; вам нужно будет создать свой собственный метод, и в этом случае было бы хорошо, если бы вы включили в свой вопрос все, что вы пробовали.   -  person FThompson    schedule 28.09.2012
comment
нажмите на одну из связанных ссылок справа, вы увидите решение.   -  person gigadot    schedule 28.09.2012
comment
Если вы изучали Java, не используйте встроенные функции, иначе вы не получите удовольствия от кодирования.   -  person MohanaRao SV    schedule 28.09.2012


Ответы (6)


сделать что-то вроде этого:

StringBuilder builder = new StringBuilder("3, 2, 1");

 System.out.println(builder.reverse());
person thiago.lenz    schedule 28.09.2012

Преобразование строки в массив символов. Цикл от длины массива символов от -1 до индекса 0, печатающий каждый символ за раз.

person Jimmy    schedule 28.09.2012

См. этот вопрос об анализе строк с разделителями-запятыми. к массивам. Переверните массив, а затем посмотрите тот же вопрос о преобразовании массива обратно в строку с разделителями-запятыми.

Также вы можете использовать это код C# в качестве примера, который должен быть легко портирован.

person Sean Dawson    schedule 28.09.2012

Если вас интересует только изменение String, не заботясь о естественном порядке, вы можете сделать что-то вроде

String word = "1, 2, 3, 4, 5";
word = word.replace(", ", "");

StringBuilder s = new StringBuilder();
for (int i = 0; i <= word.length() - 1; i++) {
    char c = word.charAt(word.length() - i - 1);
    if (s.length() > 0) {
        s.append(", ");
    }
    s.append(c);
}

Что выводит 5, 4, 3, 2, 1

Теперь, конечно, если вы заинтересованы в сохранении естественного порядка чисел, это становится немного сложнее...

//String value = "1, 2, 3, 4, 5";
String value = "1, 5, 4, 3, 2";
System.out.println("Start with " + value);
String parts[] = value.split(", ");

// We need to convert the String values to ints
List<Integer> listOfValues = new ArrayList<Integer>(5);
for (String part : parts) {
    listOfValues.add(Integer.parseInt(part));
}
// Allow the API to sort them...
Collections.sort(listOfValues);

StringBuilder sb = new StringBuilder(value.length());
for (Integer part : listOfValues) {
    if (sb.length() > 0) {
        sb.append(", ");
    }
    sb.append(part);
}

System.out.println(sb);


System.out.println(s.toString());

Какие выходы

Start with 1, 5, 4, 3, 2
1, 2, 3, 4, 5
person MadProgrammer    schedule 28.09.2012

Вот как вы могли бы это сделать:

String values = "5, 4, 3, 2, 1";
values = values.replace(", ", " ,");
StringBuilder sb = new StringBuilder(values);
values = sb.reverse().toString();
System.out.println(values);

Выход:

1, 2, 3, 4, 5
person maba    schedule 28.09.2012

Если вы можете использовать встроенный метод, это самое короткое решение:

String input = "12345";
String output = new StringBuilder(input).reverse().toString();

Если вам нужно реализовать собственное решение, это эффективный ответ с использованием char[] и повторением только половины входной строки:

String input = "12345";
char[] chars = input.toCharArray();
for (int i = 0, n = chars.length; i < n/2; i++) {
    char tmp = chars[i];
    chars[i] = chars[n-i-1];
    chars[n-i-1] = tmp;
}
String output = new String(chars);

В любом случае ввод будет обратным:

System.out.println(output);
> 54321
person Óscar López    schedule 28.09.2012