欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

Java对英文句子进行倒序排序,java英文句子倒序,/** * 工具类 *

来源: javaer 分享于  点击 6239 次 点评:182

Java对英文句子进行倒序排序,java英文句子倒序,/** * 工具类 *


/** * 工具类 * @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 <T> String list2String(List<T> 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 <T> String list2String_reverse(List<T> 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<String> retStringList = new ArrayList<String>();        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<String> 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<String> 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<String> 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<String> 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<String> list, String word) {        list.add(word);    }    private void addSplit(List<String> 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);    }}
相关栏目:

用户点评