示例:

输入: "the sky is blue"
输出: "blue is sky the"

输入: "  hello world!  "
输出: "world! hello"
解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。

输入: "a good   example"
输出: "example good a"
解释: 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。

解析1:利用栈。遇到非空格的字符就拼接到temp的后面,一遇到空格说明一个单词已经完结,入栈,重新new一个StringBuilder。接下来直达遇到非空格的字符才重新执行。因为字符串的最后一个字符后面可能没有空格无法停止,所以我们人为的开始时在最后加一个" "。

import java.util.Stack;
class Solution {
    public String reverseWords(String s) {
        Stack<String> stack = new Stack<String>();
        StringBuilder temp = new StringBuilder();
        s+=" ";
        for(int i=0;i<s.length();i++){
            if(s.charAt(i) != ' '){
                 temp.append(s.charAt(i));//拼接
            }else{
              if(temp.length() != 0){
                 stack.push(temp.toString());//范型需要转换
                 temp= new StringBuilder();
                }
            }
        }
        if(stack.isEmpty()){
            return "";
        }
        StringBuilder s2= new StringBuilder();
        s2.append(stack.pop());//最后的字符操作不能是加一个" "
        while(!stack.isEmpty()){
            s2.append(" ");
            s2.append(stack.pop());
        }
        return s2.toString();
    }
}

解析2:trim()为去掉首尾空格。split(" ")为以" "为分隔符,返回一个字符串数组

class Solution {
    public String reverseWords(String s) {
        StringBuilder ans = new StringBuilder();
        //去掉s的首尾空格 然后将字符串拆分
        String[] s1 = s.trim().split(" ");
        for(int i = s1.length - 1; i >= 0; i--){
            //空格后面的空格会变成空字符串
            if(!s1[i].equals("")) ans.append(s1[i] + " ");
        }
        //去掉最后添加上的空格
        ans = new StringBuilder(ans.toString().trim());//最后一步操作也会加一个多余的空格
        return ans.toString();
    }
}

关于这个两个方法

/**
 * @author Spike
 * @time 2014.4.25
 */
public class Split {

    public static void split() {
        String details = "M 2.9 - 9km W of Alberto Oviedo Mota, Mexico"; 
        String magnitudeString = details.split(" ")[1];
        System.out.println(magnitudeString);
        details = details.split(",")[1].trim();
        System.out.println(details);
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        split();
    }

}

输出

2.9
Mexico