java倒序输出英文句子_Java对英文句子进行倒序排序

转自:http://www.sharejs.com/codes/java/6831

/**

* 工具类

* @author Administrator

*

*/

public class Util {

/**

* 判断一个字符是否是字母

* @param c

* @return

*/

public static boolean isChar(char c) {

return c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z';

}

/**

* 判断一个数字是否是数字

* @param c

* @return

*/

public static boolean isNumber(char c) {

return c >= '0' && c <= '9';

}

/**

* 将List中的元素拼接成字符串,拼接符为split

* @param list

* @param split

* @return

*/

public static String list2String(List list, String split) {

StringBuffer sb = new StringBuffer();

for (T t : list) {

sb.append(t.toString());

sb.append(split);

}

return sb.substring(0, sb.length() - split.length());

}

/**

* 将List中的元素反序厚拼接成字符串,拼接符为split

* @param list

* @param split

* @return

*/

public static String list2String_reverse(List list, String split) {

StringBuffer sb = new StringBuffer();

for (int i = list.size() - 1; i >= 0; --i) {

sb.append(list.get(i).toString());

sb.append(split);

}

return sb.substring(0, sb.length() - split.length());

}

}

/**

* 句子倒序 单词的约束:字母或者数字,中间可以有一个连接符-

* 单词间的分隔符可以是:一个或者多个空格,多余一个的连接符-,

* 其他非字母或者数字的字符

*

* @param input:一个若干个单词和间隔符组成的字符串

* @return:按照单词倒序的句子。单词间的间隔使用一个空格

*/

public class SentenceReverser {

private static final int BEGIN = 0;

private static final int SPLIT = 1;

private static final int WORD = 2;

private static final int WORDENDWITH_ = 3;

private int status = BEGIN;

public String reverse(String sentence) {

if (sentence == null) {

return null;

}

if (sentence.isEmpty()) {

return "";

}

return _reverse02(sentence);

}

private String _reverse02(String sentence) {

int size = sentence.length();

char[] array = new char[size];

sentence.getChars(0, size, array, 0);

List retStringList = new ArrayList();

String token = "";

status = BEGIN;

for (char c : array) {

if (status == BEGIN) {

token = processBEGIN(token, c);

} else if (status == WORD) {

token = processWORD(retStringList, token, c);

} else if (status == SPLIT) {

token = processSPLIT(retStringList, token, c);

} else if (status == WORDENDWITH_) {

token = processWORDWITH_(retStringList, token, c);

}

}

if (!token.isEmpty()) {

processLastToken(retStringList, token);

}

return Util.list2String_reverse(retStringList, "")

.replaceAll(" +", " ").trim();

}

private void processLastToken(List retStringList, String token) {

if (status == WORD) {

addWord(retStringList, token);

} else if (status == SPLIT) {

addSplit(retStringList, token);

} else if (status == WORDENDWITH_) {

String word = token.substring(0, token.length() - 1);

addWord(retStringList, word);

addSplit(retStringList, "-");

}

}

private String processWORDWITH_(List retStringList, String token, char c) {

if (this.isCharOrNumber(c)) {

token += c;

status = WORD;

} else {

String word = token.substring(0, token.length() - 1);

addWord(retStringList, word);

token = "-";

token += c;

status = SPLIT;

}

return token;

}

private String processSPLIT(List retStringList, String token, char c) {

if (this.isCharOrNumber(c)) {

addSplit(retStringList, token);

token = "";

token += c;

status = WORD;

} else {

token += c;

}

return token;

}

private String processWORD(List retStringList, String token, char c) {

if (this.isCharOrNumber(c)) {

token += c;

status = WORD;

} else if (c == '-') {

token += c;

status = WORDENDWITH_;

} else {

addWord(retStringList, token);

token = "";

token += c;

status = SPLIT;

}

return token;

}

private String processBEGIN(String token, char c) {

if (this.isCharOrNumber(c)) {

token += c;

status = WORD;

} else {

token += c;

status = SPLIT;

}

return token;

}

private void addWord(List list, String word) {

list.add(word);

}

private void addSplit(List list, String split) {

list.add(" ");

// list.add(split);

}

private boolean isCharOrNumber(char c) {

return Util.isChar(c) || Util.isNumber(c);

}

}

/**

* 测试代码

*/

import static org.junit.Assert.*;

import org.junit.Before;

import org.junit.Test;

public class ReverseSentenceTest {

private SentenceReverser process;

@Before

public void before() {

process = new SentenceReverser();

}

@Test

public void test001() {

String input = "How are you";

String expectResult = "you are How";

String actualResult = process.reverse(input);

assertEquals(expectResult, actualResult);

}

@Test

public void test002() {

String input = "How are you";

String expectResult = "you are How";

String actualResult = process.reverse(input);

assertEquals(expectResult, actualResult);

}

@Test

public void test003() {

String input = "How are--you";

String expectResult = "you are How";

String actualResult = process.reverse(input);

assertEquals(expectResult, actualResult);

}

@Test

public void test004() {

String input = "How ar-e--you";

String expectResult = "you ar-e How";

String actualResult = process.reverse(input);

assertEquals(expectResult, actualResult);

}

@Test

public void test005() {

String input = "How?ar-e--you";

String expectResult = "you ar-e How";

String actualResult = process.reverse(input);

assertEquals(expectResult, actualResult);

}

@Test

public void test006() {

String input = "How are- you";

String expectResult = "you are How";

String actualResult = process.reverse(input);

assertEquals(expectResult, actualResult);

}

@Test

public void test007() {

String input = "How";

String expectResult = "How";

String actualResult = process.reverse(input);

assertEquals(expectResult, actualResult);

}

@Test

public void test008() {

String input = "How ";

String expectResult = "How";

String actualResult = process.reverse(input);

assertEquals(expectResult, actualResult);

}

@Test

public void test009() {

String input = " How ";

String expectResult = "How";

String actualResult = process.reverse(input);

assertEquals(expectResult, actualResult);

}

@Test

public void test010() {

String input = "";

String expectResult = "";

String actualResult = process.reverse(input);

assertEquals(expectResult, actualResult);

}

@Test

public void test011() {

String input = null;

String expectResult = null;

String actualResult = process.reverse(input);

assertEquals(expectResult, actualResult);

}

}

//该代码片段来自于: http://www.sharejs.com/codes/java/6831

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值