2013-11-14 5 views
4

Я создаю условие if, чтобы проверить, содержит ли строка, содержащую «me» в конце ее.Обходное решение для StringIndexOutOfBoundsException при тестировании для определенных символов

Given  Return 
-----  ------ 
Lame  True 
Meant  False 
Come  True 
etc 

В настоящее время мой код работает отлично, если длина строки больше 2 символов.

public boolean containsLy(String input) { 
    String ly = "ly"; 
    String lastString = input.substring(input.length() - 2); 
    if (input.length() < 2) { 
     return false; 
    }else if (lastString.equals(ly)) { 
     return true; 
    }else 
     return false; 
} 

Но всякий раз, когда строка имеет 2 символов или меньше я получаю эту ошибку:

StringIndexOutOfBoundsException 

Это, очевидно, из-за отрицательного числа, но я не могу думать о обходной путь для этого.

+0

Ответы, не предлагайте использовать 'endsWith'. Когда-то люди практикуют и пишут код, чтобы учиться и совершенствовать свои навыки. – Maroun

+0

Спасибо @MarounMaroun. Я беру Java 1 в настоящее время, поэтому я хотел бы получить больше теоретического подхода, вместо того, чтобы упростить мой код с другими вещами. – TaylorTDHouse

ответ

4

Если вы хотите вернуть false если length из вход хуже 2, вы можете сделать проверку перед попыткой выполнить операцию substring на вашем входе.

public boolean containsLy(String input) { 
    if (input == null || input.length() < 2) { 
     return false; 
    } 
    else { 
    String ly = "ly"; 
    String lastString = input.substring(input.length() - 2); 
    if (lastString.equals(ly)) { 
     return true; 
    } 
    else { 
     return false; 
    } 
    } 
} 

Или более простой:

public boolean containsLy(String input) { 
     if (input == null || input.length() < 2) { 
      return false; 
     } 
     else { 
     String ly = "ly"; 
     String lastString = input.substring(input.length() - 2); 
     return lastString.equals(ly); 
     } 
    } 

Или, чтобы избавиться от всех, если/еще переменных вещей (спасибо @Ingo):

public boolean containsLy(String input) { 
     return input != null 
      && input.length() >= 2 
      && input.substring(input.length() - 2).equals("ly"); 
} 
+3

+1 для решения проблемы и не предлагая альтернативного решения. – Maroun

+0

Был бы +1, если бы у меня было достаточно репутации :) Работал отлично! Я не знал, что могу включить переменные в условные выражения исключительно, так что это отличная помощь! – TaylorTDHouse

+0

@TaylorTDHouse Не забудьте принять ответ, если он решает вашу проблему. –

2

Как насчет проверки, как этот

boolean endsWithMe = "myteststring".endsWith("me"); 

Если вы делаете это на практике, то:

Псевдо код:

if length of the given string < 2 then return false 
else substring from index length - 2 to length equals "me" 
+0

Наверное, хотел ответить с тем же предложением 'endsWith()'. Как вчера! :) – SudoRahul

+0

@ R.J Мы снова встречаемся;) –

0

Не изобретайте колесо. Просто используйте String#endsWith()

Кстати, замечательно, что вы уже обнаружили , почему это не сработало, как вы это сделали. Но все же вы сначала попытаетесь взять подстроку, и только тогда вы проверите, даже если это возможно. Зачем?

0

Обходной путь прост. Проверьте длину строки перед выполнением подстроки или используйте indexOf("me"), чтобы получить индекс, и используйте длину, чтобы увидеть, находится ли она в позиции length-2.

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