|
发表于 2016-12-22 19:42:05
|
显示全部楼层
看了楼主的问题,我决定在你代码上改进了下,代码如下:
- 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文档说明。 |
|