Добрый день!
У вас ошибка, должно получится
а1амм алым уам5р.
Наверное надо делать в ручную реверс слов с условием.
Примерно вот так (JAVA 1.8, PREDICATE - разрешает переставлять символы):
import java.util.StringJoiner;
import java.util.function.Function;
public class AppSwap {
public static final String WORD_DELIMITER = " ";
public static final Function<Character, Boolean> PREDICATE = character
-> character < '0' || character > '9';
public static void main(String[] args) throws Exception {
final String originalSequence = "м1ама мыла рам5у";
final String transformedSequence = transform(originalSequence);
System.out.println(originalSequence);
System.out.println(transformedSequence);
}
private static String transform(String originalSequence) {
// Split делим на слова
final String[] words = originalSequence.split(WORD_DELIMITER);
// Transform преобразуем
for (int i = 0; i < words.length; i++) {
words[i] = transformWord(words[i], PREDICATE);
}
// Join объединяем в предложение
final StringJoiner stringJoiner = new StringJoiner(WORD_DELIMITER);
for (int i = 0; i < words.length; i++) {
stringJoiner.add(words[i]);
}
return stringJoiner.toString();
}
private static String transformWord(final String inputWord, final Function<Character, Boolean> predicate) {
final char[] chars = inputWord.toCharArray();
for (int i = 0; i < chars.length / 2; i++) {
final int startIndex = i;
final int lastIndex = chars.length - 1 - i;
if (
predicate.apply(chars[startIndex])
&& predicate.apply(chars[lastIndex])
) {
// Swap \ Обмен символами
swapChars(chars, startIndex, lastIndex);
}
}
return new String(chars);
}
private static void swapChars(final char[] chars, final int startIndex, final int lastIndex) {
final char temp = chars[startIndex];
chars[startIndex] = chars[lastIndex];
chars[lastIndex] = temp;
}
}