Как проверить, находится ли символ в строке? (Java, Junit) - PullRequest
3 голосов
/ 25 марта 2010

Как говорит заголовок, у меня возникли проблемы с прохождением моих тестов junit для проверки того, находится ли символ в строке, и как проверить, не содержит ли символ пустая строка. вот метод, который у меня есть:

     public static boolean isThere(String s, char value){
  for(int x = 0; x <= s.length(); x++){
   if(s.charAt(x) == value){
    return true;
   } else if(s.length() == 0){
    return false;
   }
  }
  return false;

А вот тест джунит:

    public void testIsThere() {
  {
   String sVal  = "Jeff George";
   boolean hasA = StringMethods.isThere(sVal,'e');
   assertTrue(hasA);
   boolean hasE = StringMethods.isThere(sVal, 'o');
   assertTrue(hasE);
   boolean notIn = StringMethods.isThere(sVal,'b');
   assertTrue(notIn);
  }
  {
   String sVal  = "";
   boolean nothingIn = StringMethods.isThere(sVal,'a');
   assertFalse(nothingIn);
   boolean notIn = StringMethods.isThere(sVal,'b');
   assertFalse(notIn); 
  }
 }

Большое спасибо, оценили

Ответы [ 6 ]

14 голосов
/ 25 марта 2010

Используйте String.indexOf() вместо:

public static boolean contains(String s, char value){
    return s != null && s.indexOf(value) > -1;
}

String sVal = "Jeff George";
assertTrue(contains(sVal, 'e'));
sVal = null;
assertFalse(contains(sVal, 'e'));
4 голосов
/ 25 марта 2010

Почему ты это делаешь? Ваша функция уже реализована как метод для String. Используйте String.indexOf вместо:

s.indexOf('a') == -1

Я думаю, что Карл Манастер был прав в комментариях о вашей конкретной проблеме - вам нужно использовать assertFalse, а не assertTrue здесь:

String sVal  = "Jeff George";
boolean notIn = StringMethods.isThere(sVal, 'b');
assertFalse(notIn); // not assertTrue

Кстати, notIn - ужасное имя для этой переменной - оно означает прямо противоположное тому, что она говорит. Может быть, поэтому ты запутался.

2 голосов
/ 25 марта 2010

С Java 6 вы можете просто сделать

final String s = "This is a test";
s.contains("x"); // False
s.contains("t"); // True
1 голос
/ 25 марта 2010

С какой проблемой вы сталкиваетесь?

Во-первых,

  for(int x = 0; x <= s.length(); x++){

не выглядит правильно. x собирается выйти за конец вашей строки (вместо этого use x < s.length(), если вы хотите перебрать строку) Но функции более высокого уровня доступны для того, что вы хотите (см. Другие ответы здесь).

0 голосов
/ 25 марта 2010

Или, попробуйте StringUtils.contains () из Apache Commons - это будет обрабатывать пустой случай String для вас.

http://commons.apache.org/lang/api/org/apache/commons/lang/StringUtils.html#contains%28java.lang.String,%20char%29

0 голосов
/ 25 марта 2010

Если String.indexOf (char) возвращает -1, hasA имеет значение false. В противном случае это правда.

...