一种实用的方法

import java.util.*;

public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            String str = sc.nextLine();
            int len = str.length();
            StringBuilder sb = new StringBuilder();
            StringBuilder ans = new StringBuilder();
            //对输入的字符串进行整理,将所有非字母替换成空格,存放到 sb 中
            for(int i = 0; i < len; i++){
                if(Character.isLetter(str.charAt(i))){
                    sb.append(str.charAt(i));
                }else{
                    sb.append(" ");
                }
            }
            //开始定义指针遍历字符串
            int len_sb = sb.length();
            int left = 0, right = len_sb - 1;
            
            while(sb.charAt(left) == ' '){    //将最左边的空格清除
                left++;
            }
            while(sb.charAt(right) == ' '){    //将最右边的空格清除
                right--;
            }
            //开始遍历,反转单词
            while(left <= right){
                int index = right;
                while(index >= left && sb.charAt(index) != ' '){    //确定单词的开始位置
                    index--;
                }
                for(int i = index + 1; i <= right; i++){    //将单词加入到 ans 中
                    ans.append(sb.charAt(i));
                }
                if(index > left){                            //如果没有到最左边,就在每个单词右边添加空格
                    ans.append(' ');
                }
                
                while(index >= left && sb.charAt(index) == ' '){    //找到每个单词的结束位置
                    index--;
                }
                right = index;
            }
            System.out.print(ans.toString());
        }
    }
}