问题描述:
输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。
句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。
例如输入“Hello world!”,则输出“world! Hello”。
问题分析:
使用String.split函数或者StringTokenizer
代码实现:
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){ } } }
代码输出:
Please input some sentence: Hi. How a u there? there? u a How Hi.
问题扩展:
如果要反转整个字符串呢?递归,非递归两种方法?
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(); }
原文:http://my.oschina.net/jimmyhan/blog/529560