2012-10-22 3 views
0

다음 문장은 반복적으로 문장을 뒤집어 쓰고 싶습니다. 나는 내가 염려하는 다른 사례가 무엇인지 알고 싶었다. 그리고 기본 경우 문자열이 null 인 경우 어떻게 처리해야합니까?문장을 Java에서 재귀 적으로 반홖

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

} 
+1

indexOf는 정적이 아 U니다. – Juvanis

+0

thnx ... 고정했습니다! – ueg1990

+0

단어 사이에 여러 공백이나 탭을 처리해야하며, 중간 문장과 문장의 구두점에 대한 규칙은 무엇입니까? –

답변

2

이 쉽게 그래서 null의 반대, null이다 : 당신의 방법은 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; 
} 

구두점 방금 이상이 특히 좀 더 복잡해진다 종료 마침표, 느낌표 또는 물음표가 표시됩니다.

+0

FordFulkerson이 제안한 것과 같이, 빈 문자열 ("")을 대문자로 반환 할 수 있습니까 (s == null) ?? – ueg1990

+1

물론 가능합니다. 이 메소드를 외부에서 호출 할 경우,'' "''''''''''''''''''''null''의 역순을''null'로 기대하기 때문에, 약간의 오해의 소지가있을 수 있습니다. 그러나 이것은'null! = ""'이후로 약간의 질질 끌기와 이론에 기초한 것입니다. 그러나 이것을 구현하는 것은 자유 롭습니다. 그리고'' "를 반환하면 여전히 정상적인 String을 그대로 되돌릴 수 있습니다. :) – asteri

0

문자열이 null 인 경우 빈 문자열 ("")을 반환 할 수 있습니다. 널 (NULL)을 리턴하려면 호출 함수에서 널 (NULL)을 처리해야하며, 사례를 놓친 경우 NullPointerException이 발생할 수도 있습니다.

관련 문제