看了楼主的问题,我决定在你代码上改进了下,代码如下:import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
public class ReverseSentence{
public static void main(String args[]){
System.out.println(reSe("first second third forth fifth sixth "));
}
public static String reWo(String str){
char b[] = str.toCharArray();
StringBuffer str1 = new StringBuffer();
for(int i = b.length - 1;i >= 0;i--){
str1.append(b[i]);
}
return (str1.toString());
}
public static String reSe(String str){
List<String>list = new ArrayList<>();
for(int i = 0;i < str.length();i++){
if(str.charAt(i) != ' '){
for(int j = i;j < str.length();j++){
if(str.charAt(j) == ' '){
System.out.println(str.substring(i,j));
list.add(reWo(str.substring(i,j)));
i = j;
break;
}
}
}
}
String ret = "";
Collections.reverse(list);
for(Iterator<String>ite = list.iterator();ite.hasNext();){
ret += ite.next() + " ";
}
return ret;
}
}
运行如下:
说明:
改进的代码不仅将你的句子反转,还将句子中的每个单词进行了反转,版主在ReverseSentence类里面另外定义了一个reWo(String str)这个函数,这个函数的功能是将单词倒置。为什么只会输出一半,原因出在j < str.length() - 1这个,你不妨将'- 1'删掉,再编译运行,你会发现可以打印到sixth这个单词,原因由你自己去推敲。至于单词为什么不反转,是因为Collections类中的reverse()方法对你list中的"first second third forth fifth sixth "进行了(单词)反转,而并不会对单个单词中每个字母的反转,这点要搞明白,具体用法参看Java SE6 API文档说明。 |