一种便于理解的伪双指针解法

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 ans = new StringBuilder();
            int left = 0, right = len - 1;
            //清除左边空格
            while(str.charAt(left) == ' '){
                left++;
            }
            //清除右边空格
            while(str.charAt(right) == ' '){
                right--;
            }
            
            //开始添加单词
            while(left <= right){
                int index = right;
                //index 向左遍历找到第一个空格后停下
                while(index >= left && str.charAt(index) != ' '){
                    index--;
                }
                //锁定遍历单词的起始位置
                for(int i = index + 1; i <= right; i++){
                    ans.append(str.charAt(i));
                }
                //判断如果不是最后一个单词,就添加一个空格
                if(index > left){
                    ans.append(' ');
                }
                
                 //使用 index 指针 跳过中间可能出现的空格
                while(index >= left && str.charAt(index) ==' '){
                    index--;
                }
                // 把 right 放到下一个单词出现的位置,继续循环
                right = index;
            }
            System.out.print(ans.toString());
        }
    }
}