IT公司100題-10-翻轉句子中單詞的順序

問題描述:java

輸入一個英文句子,翻轉句子中單詞的順序,但單詞內字符的順序不變。app

句子中單詞以空格符隔開。爲簡單起見,標點符號和普通字母同樣處理。函數

例如輸入「Hello world!」,則輸出「world! Hello」。ui

 

問題分析:spa

 使用String.split函數或者StringTokenizer.net

代碼實現:code

package oschina.mianshi;
/**
 * @project: oschina
 * @filename: IT10.java
 * @version: 0.10
 * @author: JM Han
 * @date: 15:49 2015/11/12
 * @comment: Test Purpose
 * @result:
 */

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

import static tool.util.*;

public class IT10 {
   public static void main(String[] args) {
      try {
         System.out.println("Please input some sentence: ");
         InputStream in = System.in;
         InputStreamReader charsIn = new InputStreamReader(in);
         BufferedReader bufferedReader = new BufferedReader(charsIn);
         String str = bufferedReader.readLine();

         String[] fields = str.split("\\s+");
         for(int i = fields.length - 1; i >= 0; i--)
            System.out.print(fields[i] + " ");
      } catch (IOException e){
      }
   }
}

代碼輸出:blog

Please input some sentence: 
Hi. How a u there?
there? u a How Hi.

問題擴展:遞歸

若是要反轉整個字符串呢?遞歸,非遞歸兩種方法?token

public static String reverse2NR(String str){
   return new StringBuilder(str).reverse().toString();
}

public static String reverse2R(String str){
   if(str == null || str.length() <= 1)
      return str;

   return reverse2R(str.substring(1)) + str.charAt(0);
}

某些單詞不須要反轉呢?

輸入: 第一個字符串: "http://my.oschina.net/jimmyhan/blog"
子串: "jimmyhan"
輸出: "golb/jimmyhan/ten.anihcso.ym//:ptth"

public static String reverse3(String str, String token){
   StringBuilder sb = new StringBuilder();
   String rtoken = new StringBuilder(token).reverse().toString();

   while(str.contains(token)){
      String s = str.substring(0, str.indexOf(token));
      sb.append(s).append(rtoken);
      str = str.substring(str.indexOf(token)+token.length());
   }
   //剩餘的部分String
   sb.append(str);
   return sb.reverse().toString();
}
相關文章
相關標籤/搜索