思路:
public class ReverseSentence {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(reverseSentence("I'm a student"));
System.out.println(reverseSentence("I'm a student").length());
System.out.println(reverseSentence(" I'm a student"));
System.out.println(reverseSentence(" I'm a student").length());
System.out.println(reverseSentence("I'm a student "));
}
//先翻转整个句子,再翻转每个单词
public static String reverseSentence(String str){
if(str==null||str.length()==0)
return null;
char ch[]=str.toCharArray();
f(ch,0,ch.length-1);
int begin=0;
int end=0;
while(end<ch.length){
if(ch[end]!=' '){
if(end==ch.length-1){ //最后一个单词无空格
f(ch,begin,end);
}
end++;
}
else if(ch[end]==' '){ //当遇到空格时,把空格之前的单词翻转,并且把start置为end
f(ch,begin,end-1);
end++;
begin=end; //下一个单词的起始位置
}
}
return String.valueOf(ch);
}
//局部逆序函数
public static void f(char[] ch,int begin,int end){
if(ch==null||ch.length==0||begin==end)
return;
while(begin<end){
char temp=ch[begin];
ch[begin]=ch[end];
ch[end]=temp;
begin++;
end--;
}
}
//该函数实现翻转句子(常规做法)(但是此做法没有考虑字符串前后有空格的情况)
public String reverseSentence_2(String str) {
if(str.length()==0)
return str;
if(str.trim().equals(""))
return str;
StringBuilder sb=new StringBuilder();
String[] s=str.split(" ");
for(int i=s.length-1;i>0;i--){
sb.append(s[i]);
sb.append(" ");
}
sb.append(s[0]);
return sb.toString();
}
}