在Java中递归地反转句子

在Java中递归地反转句子,java,recursion,Java,Recursion,我想递归地反转一个句子,下面是我下面的代码。我想知道我还应该处理哪些基本案件。对于基本情况,如果字符串为null,应该如何处理 public String reverse(String s) { int n = s.indexOf(' '); if(n == -1) return s; return reverse(s.substring(n+1))+" "+s.substring(0,n); } null的反面是null,因此这很简单: if(s == null) return

我想递归地反转一个句子,下面是我下面的代码。我想知道我还应该处理哪些基本案件。对于基本情况,如果字符串为null,应该如何处理

public String reverse(String s) {
int n = s.indexOf(' ');
if(n == -1)
    return s;
return reverse(s.substring(n+1))+" "+s.substring(0,n);

}  

null
的反面是
null
,因此这很简单:

if(s == null) return null;
由于您的方法可能返回
null
,因此,在引用
return
语句中的值并尝试向其追加之前,我还将执行一些null检查。所以,有点像

String reversed = reverse(s.substring(n+1));
if(reversed != null) return reverse + " " + s.substring(0,n);
else return s;
其他一切看起来都很好。你不需要任何其他的基本情况。当然,这将完全按照原样颠倒句子,包括标点符号和大小写信息。如果你想做这类事情,需要更费力的处理

为了确保适当的大小写结构,我可能会在您的正常基本情况下执行以下操作:

if(n == -1) {
    s = s.toLowerCase();
    String firstLetter = new String(s.charAt(0));
    s = s.replaceFirst(firstLetter, firstLetter.toUpperCase());
    return s;
}

标点符号会变得更复杂一些,尤其是当您的标点符号不仅仅是一个句号、感叹号或问号时。

在您的例子中,如果字符串为null,您可以返回一个空字符串(“”)。返回null将要求您在调用函数中处理null,如果您错过了一个案例,您可能会遇到NullPointerException

您是否需要处理单词之间的多个空格或制表符,以及您对句中和句尾标点的规则是什么?就像FordFulkerson建议的那样,我可以返回空字符串(“”)吗对于(s==null)的情况?当然可以。在某些情况下,这可能会有点误导,因为如果我从外部调用此方法,我会期望
的反面是
,而
null
的反面是
null
,但这只是一点挑剔和基于理论的东西,因为
null!=“”
。您可以自由地按照自己的选择来实现它,返回
仍将很好地反转正常字符串。:)