您的位置:首页 > 其它

IT公司100题-10-翻转句子中单词的顺序

2015-11-12 17:44 585 查看
问题描述:

输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。

句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。

例如输入“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();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: