请问下这个单词反转排序应该怎么写

随便输出一个字符串
String str ="45abc,+de==fg";
里面含有 abc,de,fg 三个单词
怎么处理能让单词反转,其他顺序不变呢
输出 “45cba,+ed==gf”;
这个处理字符串的方法应该怎么写啊

public class HelloWorld {
    public static String revstr(String s)
    {
        char[] ch = s.toCharArray();
        for (int i = 0; i < ch.length; i++)
        {
            if ((ch[i] >= 'A' && ch[i] <= 'Z') || (ch[i] >= 'a' && ch[i] <= 'z'))
            {
                int j = i + 1;
                while (j < ch.length && ((ch[j] >= 'A' && ch[j] <= 'Z') || (ch[j] >= 'a' && ch[j] <= 'z'))) j++;
                j--;
                if (i != j)
                {
                    for (int k = i; k <= (j - i) / 2 + i; k++)
                    {
                        //System.out.println("i" + i + "j" + j + "k" + k);
                        char temp = ch[k];
                        ch[k] = ch[j - k + i];
                        ch[j - k + i] = temp;                   
                    }
                }
                i = j;
            }
        }
        return new String(ch);
    }
    public static void main(String[] args) {
        System.out.println(revstr("45abc,+de==fg"));
    }
}

45cba,+ed==gf

public class Re {
    public static String reverse (String str){
        Stack<Character> stack = new Stack<Character>();
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < str.length(); i++) {
            //如果是字母就放入栈中,用来反转,不是字母就先将栈中所有数据取出,再把该字符加入到最后
            if (str.charAt(i) >= 'a'&& str.charAt(i) <= 'z') {
                stack.push(str.charAt(i));
            }else {
                while (!stack.isEmpty()) {
                    Character endCharacter = stack.pop();
                    sb.append(endCharacter);
                }
                sb.append(str.charAt(i));
            }
            //最后一个是字母的时候,栈非空,将所有字母取出
            if (i==str.length()-1) {
                while (!stack.isEmpty()) {
                    Character endCharacter = stack.pop();
                    sb.append(endCharacter);
                }

            }
        }
        return sb.toString();

    }
    public static void main(String[] args) {
        String str ="45abc,+de==fg";
        System.out.println(reverse(str));

    }

}

public static void main(String[] args) {
String str ="45abc,+de==fg";
String str1 = str;

    Map<String, String> replace = new HashMap<String, String>();
    Pattern patternNotes = Pattern.compile("([a-z]|[A-Z]){2,}");
    Matcher matcherNotes = patternNotes.matcher(str1);
    while(matcherNotes.find()){
        String group = matcherNotes.group();
        str1 = str1.replaceFirst(group, "");
        replace.put(group, flip(group));
        matcherNotes = patternNotes.matcher(str1);
    }

    for (Map.Entry<String, String> entry : replace.entrySet()) {
        str = str.replace(entry.getKey(), entry.getValue());
    }

    System.out.println(str);
}

private static String flip(String group) {
    if(group == null || "".equals(group)){
        return "";
    }
    StringBuffer result = new StringBuffer();
    char[] charArray = group.toCharArray();

    for (int i=charArray.length-1; i>=0; i--){
        result.append(charArray[i]);
    }

    return result.toString();
}

String str ="45aBc+de.==fg,@hd";
String re = "[^A-Za-z]";
String result = str;
for (String split: str.split(re)){
if (split!=null && split.length()!=0) {
String reverse = new StringBuffer(split).reverse().toString();
result = result.replace(split,reverse);
}

    }
    System.out.println(result);

            正则拆分替换