0

我想递归地反转一个句子,下面是我的以下代码。我想知道我需要处理哪些其他基本案例。对于基本情况,如果字符串为空,应该如何处理?

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

}  
4

2 回答 2

2

nullis的反面null,所以很简单:

if(s == null) return null;

因为您的方法有可能返回,所以在引用您的语句中的值并尝试附加到它null之前,我还会进行一些空检查。return所以,像...

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;
}

标点符号变得有点复杂,特别是如果你有不止一个结束句号、感叹号或问号。

于 2012-10-22T18:00:10.603 回答
0

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

于 2012-10-22T18:16:19.930 回答