Вывести слова в обратном порядке, оставив на месте символы и числа

Логику вроде понял, но при компиляции устойчиво выводит то же значение, которое задается. Подозреваю, что не то значение возвращаю, но возможно ошибаюсь. Вот что набросал:

Main класс:

public class AnagramApplication {
    public static void main(String[] args) {
        String reverse = "a1bcd efg!h";
        Anagram anagram = new Anagram();
        String reversedText = anagram.SortingMethod(reverse);
        System.out.println(reversedText);
    }
}

Основной алгоритм:

import java.util.Arrays;
import java.util.stream.Collectors;

public class Anagram {
    
    public String reverseThis(String text) {
        String[] letters = text.split(" ");
        return Arrays.stream(letters).map(this::SortingMethod).collect(Collectors.joining(" "));
    }

    public String SortingMethod(String letter) {
        char[] lettersArray = letter.toCharArray();
        int startBorder = 0;
        int endBorder = lettersArray.length - 1;
        while (startBorder < endBorder) {
            if (Character.isAlphabetic(lettersArray[startBorder]) &&
                    Character.isAlphabetic(lettersArray[endBorder])) {
                char temp = lettersArray[startBorder];
                temp = lettersArray[endBorder];
                lettersArray[endBorder] = temp;
                startBorder++;
                endBorder--;

            } else if (Character.isAlphabetic(lettersArray[startBorder]) && !Character.isAlphabetic(lettersArray[endBorder])) {
                endBorder--;
            } else if (!Character.isAlphabetic(lettersArray[startBorder]) && Character.isAlphabetic(lettersArray[endBorder])) {
                startBorder++;
            } else {
                startBorder++;
                endBorder--;
            }
        }

        return String.valueOf(lettersArray);
    }

}

Ответы (2 шт):

Автор решения: AVRamones

Ну как-то так можно попробовать (костыльно):

public static void main(String[] args) {
 String reverse = "a1bcd efg!h";
 String[] words = reverse.split(" ");
 StringBuilder builder = new StringBuilder();
 for (String str : words){
   builder.append(reverseString(str)).append(" ");
 }
 System.out.println(builder.toString().trim());
 }

public String reverseString(String str){
 HashMap<Integer, Character> map = new HashMap<>();
 StringBuilder result = new StringBuilder();
 char[] chars = str.toCharArray();
 for (int i = 0; i < chars.length; i++){
    if (!Character.isLetter(chars[i])){
        map.put(i,chars[i]);
    }
    else
        result.append(chars[i]);
 }
 result.reverse();
 for (Map.Entry<Integer, Character> entry : map.entrySet()) {
    result.insert(entry.getKey(), entry.getValue().toString());
 }
 return result.toString();
}
→ Ссылка
Автор решения: Alexandr

Попробуйте так:

public String SortingMethod(String letter) {
    char[] lettersArray =
            letter.toCharArray();
    int startBorder = 0;
    int endBorder = lettersArray.length - 1;
    while (startBorder < endBorder) {
        if (!Character.isAlphabetic(lettersArray[startBorder]))
            startBorder++;
        else if (!Character.isAlphabetic(lettersArray[endBorder]))
            endBorder--;
        else {
            char temp = lettersArray[startBorder];
            lettersArray[startBorder] = lettersArray[endBorder];
            lettersArray[endBorder] = temp;
            startBorder++;
            endBorder--;
        }
    }

    return String.valueOf(lettersArray);
}
→ Ссылка