3 votes

Comment tester si un caractère n'est PAS dans une chaîne de caractères ? (java, junit)

Comme le titre l'indique, j'ai des problèmes avec mes tests junit qui passent pour vérifier si un caractère n'est pas dans une chaîne et comment vérifier si une chaîne vide n'a pas de caractère. voici la méthode que j'ai :

     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;

Et voici le test junit :

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

Merci beaucoup, j'apprécie

14voto

Péter Török Points 72981

Utilisez String.indexOf() à la place :

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'));

4voto

Mark Byers Points 318575

Pourquoi faites-vous cela ? Votre fonction est déjà implémentée comme une méthode sur String. Utilisez String.indexOf à la place :

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

Je pense que Carl Manaster a eu raison dans les commentaires concernant votre problème spécifique - vous devez utiliser assertFalse no assertTrue ici :

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

En passant, notIn est un nom terrible pour cette variable - il signifie exactement le contraire de ce qu'il dit. C'est peut-être pour cela que vous vous êtes trompé.

2voto

Jarrod Roberson Points 32263

Avec Java 6, vous pouvez simplement faire

final String s = "This is a test";
s.contains("x"); // False
s.contains("t"); // True

1voto

Brian Agnew Points 143181

Quel est le problème que vous rencontrez ?

Tout d'abord,

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

n'a pas l'air bien. x va s'écouler à la fin de votre chaîne ( use x < s.length() à la place si vous voulez itérer dans une chaîne de caractères). Mais des fonctions de plus haut niveau sont disponibles pour faire ce que vous voulez (voir les autres réponses ici).

0voto

Yes - that Jake. Points 9184

Si String.indexOf(char) renvoie -1, hasA est faux. Sinon, il est vrai.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X