题目:输入一个英文句子,翻转句子中单词的顺序,但是单词内支付的顺序不变,为简单起见,标点符号和普通字母一样处理。例如输入字符串“I am a student.”则输出“student. a am I ”。
翻转字符串可以先翻转整个字符串,然后再将每个单词的字符翻转过来。
public class Offer42 {
public static void main(String[] args) {
String str = "I am a student.";
str = reverseSentence(str);
System.out.println(str);
}
public static String reverseSentence(String sentence){
if (sentence == null || sentence =="") {
return sentence;
}
StringBuilder builder = new StringBuilder();
//翻转整个句子
String str = reverse(sentence, 0, sentence.length()-1);
//翻转每个单词
String[] strs = str.split(" ");
for(int i = 0;i<strs.length;i++){
builder.append(reverse(strs[i], 0, strs[i].length()-1));
if(i+1<strs.length){
builder.append(" ");
}
}
return builder.toString();
}
/**
* 将给定的字符串进行全部翻转
* @param str
* @param start
* @param end
*/
public static String reverse(String str,int start,int end){
if(str==null || str==""){
return str;
}
//换成char[]
char[] chars = str.toCharArray();
StringBuilder builder = new StringBuilder();
for(int i = 0;i<chars.length;i++){
System.out.println(chars[i]);
}
//将整个句子翻转
while(start<end){
char temp = chars[start];
chars[start] = chars[end];
chars[end] = temp;
start++;
end--;
}
//拼接字符串数组
int i = 0;
while(i<chars.length){
builder.append(chars[i]);
i++;
}
return builder.toString();
}
}