Например, если у меня есть строка, содержащая 5, 4, 3, 2, 1, как мне сделать так, чтобы новая строка или как распечатать 1, 2, 3, 4, 5? Спасибо.
Как поменять местами числа в строке?
Ответы (6)
сделать что-то вроде этого:
StringBuilder builder = new StringBuilder("3, 2, 1");
System.out.println(builder.reverse());
Преобразование строки в массив символов. Цикл от длины массива символов от -1 до индекса 0, печатающий каждый символ за раз.
См. этот вопрос об анализе строк с разделителями-запятыми. к массивам. Переверните массив, а затем посмотрите тот же вопрос о преобразовании массива обратно в строку с разделителями-запятыми.
Также вы можете использовать это код C# в качестве примера, который должен быть легко портирован.
Если вас интересует только изменение 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
Вот как вы могли бы это сделать:
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
Если вы можете использовать встроенный метод, это самое короткое решение:
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