面试题58-题目一:翻转单词顺序

/*

 * 面试题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);

      

    }

 

}

猜你喜欢

转载自blog.csdn.net/juaner1993/article/details/82776556