用java写一个英文句子反转的方法:/**
 * 要求:将一个英文句子反转, e.g. much. very you love I => I love you very much.
 * 但不能使用String的库函数:split,indexOf,lastIndexOf,subString
 * 
 */

解决方案 »

  1.   

    那就用StringBuffer的reverse(),很好很强大!
      

  2.   

    public class ReversalWords {
    /**
     * 
     * @author 流浪的鱼
     * @version 1.0
     * 
     */
    public static String doReversal(String str) {
    char[] c = str.toCharArray();
    String result = "";
    StringBuffer sb = new StringBuffer();
    for (int i = c.length - 1; i >= 0; i--) {
    if (c[i] != ' ') {
    sb.append(c[i]);
    }
    if (c[i] == ' ' || i == 0) {
    result = result + sb.reverse().toString();
    if (i != 0)
    result += " ";
    sb.delete(0, sb.length());
    }
    }
    return result;
    } public static void main(String[] args) {
    System.out.println(doReversal("much. very you love I"));
    }
    }
    这个感觉有点投机,,谁还有比较巧的办法?
      

  3.   

    答:不,不是的.用StringBuffer的reverse()得到的结果是不正确的,不是楼主要的那个.
      

  4.   

    StringTokenizer 来读取以空格为分隔的String  
    定义一个String 比如result
    while(tokenizer.hasMoreToken()){
    result=tokenizer.nextToken()+" "+result;
    }
      

  5.   

    答:英文句子反转单词间的空格数保持原样才行啊!
    代码很简单:public static String reverse(String s)//句子反转单词之间是空格,保持单词间空格原样
    {
    int pos=0;
    StringBuilder sb=new StringBuilder();
    for(int i=0;i<s.length();i++)
    {
    char c=s.charAt(i);
    if(c==' ')
    {
    pos=0;
    }
    sb.insert(pos, c);
    if(c!=' '){pos++;}
    }
    return sb.toString();
    }若:String s="much.                  very you love I";
     System.out.println(reverse(s));
    结果是:
    I love you very                  much.
      

  6.   

    public class StringBuffer1{
      public static void main(String[]args){
       StringBuffer sb=new StringBuffer("I love you very much.");
       StringBuffer str=sb.reverse();
       System.out.println(str);
    }
    }
    楼主我刚才写了这种简单的方法,不知是不是呢?
      

  7.   

    献丑了:
    import static java.lang.System.out;
    class StringReverse {

    public static boolean isBlank(char c) {
    return (c == ' ' || c == '\t' || c == '\r' || c == '\n');
    }

    public static String sentenceReverse(String src) {

    if(src == null)
    return null;

    char[] contents = src.toCharArray();
    final int length = contents.length;

    if(length < 2)
    return src;

    char[] res = new char[length];
    int startPos = -1, endPos = -1, destCursor=0;
    boolean blankState = true;

    for(int srcCursor=length-1; srcCursor>=0; srcCursor--) {
    if(isBlank(contents[srcCursor])) {
    if(!blankState) {
    for(int i=endPos; i<=startPos; i++)
    res[destCursor++] = contents[i];
    endPos = -1;
    blankState = true;
    }
    res[destCursor++] = contents[srcCursor];
    }
    else {
    if(blankState) {
    blankState = false;
    endPos = startPos = srcCursor;
    }
    else
    endPos--;
    }
    }
    if(endPos >= 0) {
    for(int i=endPos; i<=startPos; i++)
    res[destCursor++] = contents[i];
    }

    return String.valueOf(res);
    }
    }
    public class Test
    {
    public static void main(String[] args) {

    out.println(StringReverse.sentenceReverse("much.  very you love I"));
    }
    }
      

  8.   

    不好意思,上面有个逻辑上的瑕疵,这里改正一下:
    import static java.lang.System.out;
    class StringReverse {

    public static boolean isBlank(char c) {
    return (c == ' ' || c == '\t' || c == '\r' || c == '\n');
    }

    public static String sentenceReverse(String src) {

    if(src == null)
    return null;

    char[] contents = src.toCharArray();
    final int length = contents.length;

    if(length < 2)
    return src;

    char[] res = new char[length];
    int startPos = -1, endPos = -1, destCursor=0;
    boolean blankState = true;

    for(int srcCursor=length-1; srcCursor>=0; srcCursor--) {
    if(isBlank(contents[srcCursor])) {
    if(!blankState) {
    for(int i=endPos; i<=startPos; i++)
    res[destCursor++] = contents[i]; blankState = true;
    }
    res[destCursor++] = contents[srcCursor];
    }
    else {
    if(blankState) {
    blankState = false;
    endPos = startPos = srcCursor;
    }
    else
    endPos--;
    }
    }
    if(!blankState) {
    for(int i=endPos; i<=startPos; i++)
    res[destCursor++] = contents[i];
    }

    return String.valueOf(res);
    }
    }
    public class Test
    {
    public static void main(String[] args) {

    out.println(StringReverse.sentenceReverse("much. very you love I"));
    }
    }