翻转字符串里的单词
示例:
输入: "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