2016-11-13 44 views
2

我的工作得到它打印句子的单词倒着出来的方法。我非常接近解决方案,但遇到了一些小麻烦。递归句子打印出字倒着

这里是我的代码:

public static String reverseString(String str) { 

     if (str.equals("")) 
      return ""; 

     else { 

      int i = str.length() - 1; 

      while (!Character.isWhitespace(str.charAt(i))) { 
       if (i - 1 < 0) 
        break; 
       i--; 
      } 

      return str.substring(i,str.length()) + reverseString(str.substring(0,i)); 
     } 

    } 

现在的问题是,从我的测试输出:

String test = "This is a test."; 

System.out.println(reverseString(test)); 

是给我这回:

test. a isThis 

现在,当我尝试提高被返回的子字符串的索引并手动添加空格时,它会切断“This”中的“T”。也就是说,如果我决定,而不是返回如下:

return str.substring(i+1,str.length()) + " " + reverseString(str.substring(0,i)); 

然后我回去

test. a is his 

有没有人对我的总体实施任何建议或指针?

+0

你得到它的工作? – ItamarG3

回答

2

您可以更改return语句是:

return str.substring(i, str.length()).trim() + " " + reverseString(str.substring(0, i)); 
2

拆分使用String.split然后句子迭代所得的阵列上倒退。在空白分割做

test.split(" +"); 

分裂方法以一个正则表达式和上述手段:在分割一个或多个连续的空格。

递归方法:

public String reverse(final String s) { 

    final int pos = s.indexOf(' '); 
    if (pos > -1) { 
     return reverse(s.substring(pos + 1).trim()) + " " + s.substring(0, pos).trim(); 
    } 

    return s; 
} 
+2

我已经做了一个迭代的方法。我试图找出递归方法。 – ClownInTheMoon

+1

@ClownInTheMoon:对不起,错过了。我编辑了我的答案。 – Quagaar

-1

与您的代码工作,你就只需要在你想要的任何字符串的前面加上一个额外的空间用此代码反转

reverseString(" " + str) 

当您第一次执行该方法时。

+0

但是这总是成立的,在这种情况下......'i'是临时递归'str'中最后一个单词的长度,所以它总是小于'str'的​​长度。你提出的建议会导致每封信都被当作一个单独的单词处理(即它会返回'。tsetasisih T') – ItamarG3

+0

是的,你说得对,我误解了我已经更新了我的答案的问题 – Joking313

+1

这会按照,而不是翻转一个句子中的单词。 '原文:这是一个测试。反转:.tset a si sihT' –

1

在这种方法中,你可以选择创建串基础上的空白。对于输入This is a test.以下方法将返回test. a is This。这里的想法是,如果你有一个领先的空间,你将实际转换为尾随空间。

public static String reverseString(String str) { 

     if (str.equals("")) 
      return ""; 

     else { 

      int i = str.length() - 1; 

      while (!Character.isWhitespace(str.charAt(i))) { 
       if (i - 1 < 0) 
        break; 
       i--; 
      } 
      String substring; 

      if(Character.isWhitespace(str.charAt(i))) 
      { 
       substring= str.substring(i+1,str.length())+" "; 
      } 
      else 
      { 
       substring= str.substring(i,str.length()); 
      } 

      return substring + reverseString(str.substring(0,i)); 
     } 

    }