题目描述
牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?
方法一:
public class Solution {
public String ReverseSentence(String str) {
//边界条件
if (str == null || str.length() == 0) {
return str;
}
if (str.trim().equals("")) {
return str;
}
StringBuffer sb = new StringBuffer();
//将句子用“ ”分开
String[] newStr = str.split(" ");
for (int i = newStr.length - 1; i >= 0; i--) {
sb.append(newStr[i]);
sb.append(" ");
}
sb.deleteCharAt(sb.length() - 1);
return sb.toString();
}
}
方法二:先把所有的字母反转过来,再挨个单词反转。
package test;
class Solution {
public String ReverseSentence(String str) {
if (str == null || str.length() == 0)
return str;
char[] arr = str.toCharArray();//转换成字符数组
reverse(arr, 0, arr.length - 1);//先全部翻转一次
int start = 0;//指向单词第一个字母
int end = 0;//指向单词最后一个字母
while (start < arr.length) {//这里是小于arr.length,我写成小于end了
if (arr[start] == ' ') {//这里是单引号,单引号的才是字符变量
start++;//作用是判断两个空格
end++;
} else if (end == arr.length || arr[end] == ' ') {//尾部是空格或者结束
reverse(arr, start, end-1);
end++;
start = end;
} else {
end++;
}
}
return String.valueOf(arr);
}
private void reverse(char[] arr, int begin, int end){
while(begin<end){
char temp = arr[begin];
arr[begin] = arr[end];
arr[end] = temp;
begin++;
end--;
}
}
}
public class Main{
public static void main(String[] args) {
String a = "abc. XYZ def";
Solution p = new Solution();
String b = p.ReverseSentence(a);
System.out.println("结果:"+b);
}
}
同方法一:使用str.split.把单词分开,然后使用StringBuffer新建一个可变字符串,倒着加进去。
在java.lang包中有String.split()方法,返回是一个数组。用法:
特殊地:
1、如果用“.”作为分隔的话,必须是如下写法:String.split("\\."),这样才能正确的分隔开,不能用String.split(".");
2、如果用“|”作为分隔的话,必须是如下写法:String.split("\\|"),这样才能正确的分隔开,不能用String.split("|");
3、如果用“\”作为分隔的话,必须是如下写法:String.split(\\\),这样才能正确的分隔开,不能用String.split("\");
public class Solution {
public String ReverseSentence(String str) {
if(str.trim().equals("")){//也可以换成上面的那种方法的边界条件判断
return str;
}
String[] a = str.split(" ");
StringBuffer o = new StringBuffer();
int i;
for (i = a.length; i >0;i--){
o.append(a[i-1]);
if(i > 1){
o.append(" ");
}
}
return o.toString();
}
}