Reverse Words in a String

Given an input string, reverse the string word by word.

For example,
Given s = "the sky is blue",
return "blue is sky the".

给定一个字符串,将里面包含的单词倒叙排列。我们可以将字符串通过空格分割成一个字符串数组,然后从后面开始组成一个新的字符串。这里要注意的是分割字符串我们用到了String的split()方法,split的参数类型是个正则表达式,不是简单的字符串,我们要用转义字符来写,例如用空格来分的话最好写成“\\s” 或者“\\s+”,代表通过一个空格或多个空格来分割。通过返回一个字符串数组的代码如下:
public class Solution {
    public String reverseWords(String s) {
        String[] result = s.trim().split("\\s+");
        StringBuilder sb = new StringBuilder();
        for(int i = result.length - 1; i >= 0; i--) {
                    sb.append(result[i] + " ");
        }
        return sb.toString().trim();
    }
}


另外一种方法我们还可以从字符串末尾开始扫描,如果遇到空字符就跳过,知道遇到不为空的字符,标记当前字符的位置,然后继续扫描,直到遇到下一个为空的字符,用substring方法将这一段子串记录到新的字符串中,这样知道扫描完整个字符串。代码如下:
public class Solution {
    public String reverseWords(String s) {
        if(s == null || s.length() == 0) return s;
        StringBuilder sb = new StringBuilder();
        for(int i = s.length() - 1; i >= 0 ; i--) {
            if(s.charAt(i) == ' ') continue;
            int end = i;
            while(i >= 0 && s.charAt(i) != ' ') i --;
            sb.append(s.substring(i + 1, end + 1)).append(" ");
        }
        return sb.toString().trim();
    }
}

猜你喜欢

转载自kickcode.iteye.com/blog/2276410