問題:
給予一個字串,請將字串中的單字排列順序反轉,如果字串中有多個空格,請將多個空格縮減至一個。若字串中沒有文字,則請回傳空字串(empty string)。
例子
假設字串為 "the sky is blue"
則回傳答案則是 "blue is sky the"
想法
這題是以 word 為單位作反轉,而從題目可以知道其 word 的定義就是:『用空白』隔開的字串。
所以我們可以把『空白』當成分隔符號,取出我們所要的 子字串,再將其用相反的方式組合回去。而在組合回去的過程就可以不要去管原本有多少的空格了。
但是,這樣一來可能會遇到一個問題。『如果有多個空格在兩個 word』之間怎麼辦?不就會出錯了嗎?
沒錯!這的確是個大問題!所以,有另一個(偷懶)善工用具的好方法,那就是用 regex expression 來分割字串。
String[] splitedStrArray = inputString.split("\\S+"")
其中:
\\S 代表非空白字元
\+ 代表一個或多個以上
(詳細的 regex expression 支援程度可以查看 Java docs
得到切好的字串陣列後,再用逆向方式並使用 空白 當區隔符號將字串組合回去。
StringBuilder builder = new StringBuilder();
for(int i=splitedStrArray.length-1; i>=0; i--)
builder.append(splitedStrArray[i]).append(" ");
最後再把尾巴的空白符號給消掉就可以回傳了!
String result = builder.toString().trim();
return result;