示例:
输入: "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

京公网安备 11010502036488号