/*
* 面试题58-题目一:翻转单词顺序
* 题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。
* 为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am a student.",则输出"student. a am I"。
* 思路:第一步翻转句子中所有的字符。比如翻转"I am a student."中所有的字符得到".tneduts a ma I",
* 此时不但翻转了句子中单词的顺序,连单词内的字符顺序也被翻转了。
* 第二步再翻转每个单词中字符的顺序,就得到了"student.a am I"。
*/
public class No58ReverseSentence {
public static void main(String[] args) {
No58ReverseSentence n = new No58ReverseSentence();
String s = "I am a student.";
System.out.println(n.ReverseSentence(s));
}
public String ReverseSentence(String str) {
if (str == null || str.length() == 0) {
return str;
}
if (str.trim().length() == 0) {
return str;
}
StringBuilder sb = new StringBuilder();
//第一步翻转句子中所有的字符
String re = reverse(str);
//按空格划分单词
String[] s = re.split(" ");
//第二步再翻转每个单词中字符的顺序
for (int i = 0; i < s.length - 1; i++) {
sb.append(reverse(s[i]) + " ");
}
//添加反转的最后一个单词,不加空格的
sb.append(reverse(s[s.length - 1]));
return String.valueOf(sb);
}
//将字符串反转
private String reverse(String str) {
StringBuilder sb = new StringBuilder();
for (int i = str.length() - 1; i >= 0; i--) {
sb.append(str.charAt(i));
}
return String.valueOf(sb);
}
}
面试题58-题目一:翻转单词顺序
猜你喜欢
转载自blog.csdn.net/juaner1993/article/details/82776556
今日推荐
周排行