Given an input string, reverse the string word by word.
For example,
Given s = "the sky is blue
",
return "blue is sky the
".
Clarification:
- What constitutes a word?
A sequence of non-space characters constitutes a word. - Could the input string contain leading or trailing spaces?
Yes. However, your reversed string should not contain leading or trailing spaces. - How about multiple spaces between two words?
Reduce them to a single space in the reversed string.
Source
public class Solution {
public String reverseWords(String s) {
if(s.length() == 0) return s;
String[] a = s.split(" "); //只会按空格分开,多个空格时,中间的空格也会被当做空存起来,打印a的长度会发现空也被算进去,但输出不了字符,也不输出空格
if(a.length == 0) return ""; //只有空格的情况
List<String> temp = new ArrayList<String>();
for(int i = 0; i < a.length; i++){
if(!a[i].isEmpty()) //数组也有isEmpty方法,注意这里不能判断a[i]是否为空格,而应判断是否为空
temp.add(a[i]);
}
Collections.reverse(temp); //Collections.reverse(list) 将list的元素逆序 注意是逆序不是排序 Collections.sort是排序
String b = new String();
for(int i = 0; i < temp.size() - 1; i++){ //倒数第二个后有空格
b += temp.get(i) + " ";
}
b += temp.get(temp.size() - 1); //最后一个后没空格
return b;
}
}
Test
public static void main(String[] args){
String s = " ab c d ";
System.out.println(new Solution().reverseWords(s));
}