問題描述: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(); }