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 не является статическим. – Juvanis

+0

thnx ... исправлено! – ueg1990

+0

Вам нужно будет обрабатывать несколько пробелов или вкладок между словами, и каковы ваши правила для пунктуации среднего предложения и конца предложения? –

ответ

2

Реверс 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 предложил, могу ли я вернуть пустую строку ("") для случая if (s == null) ?? – ueg1990

+1

Конечно, вы можете. В некоторых случаях это может немного ввести в заблуждение, поскольку, если я вызываю этот метод извне, я ожидаю, что обратное значение '' '' будет '' '' и обратное значение 'null' будет' null', но это всего лишь немного nitpick и что-то основано на теории, так как 'null! =" "'. Вы можете реализовать его, но вы выбираете, и возврат '' '' будет по-прежнему полностью отменять нормальные строки. :) – asteri

0

в вашем случае, если строка равна null, вы можете вернуть пустую строку (""). Возврат null потребует, чтобы вы обработали нуль в вызывающих функциях, и если вы пропустили случай, вы можете столкнуться с NullPointerException

Смежные вопросы