2010-03-24 11 views
3

Comme le dit le titre, 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:Comment tester si un caractère n'est pas dans une chaîne? (java, 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; 

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, apprécié

+0

un meilleur nom ce isThere() serait containsChar() –

+0

Code Certains mieux formaté et une explication plus claire de ce qu'est exactement ce que ne fonctionne pas pour nous aider à vous aider. –

+1

Je pense que vous voulez simplement 'assertFalse (notIn)' –

Répondre

14

Utilisation 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')); 
+0

cela a fonctionné avec brio, il n'y a aucun moyen que je pouvais avoir vu que return si s n'est pas égal à null ET que l'indice de la valeur est supérieur à -1, ce qui signifie qu'il est là et que la chaîne n'est pas vide merci beaucoup – Curtis

4

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

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

Je pense que Carl Manaster avait raison dans les commentaires au sujet de votre problème - vous devez utiliser assertFalse pas assertTrue ici:

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

En aparté, notIn est un nom terrible pour cette variable - cela signifie exactement le contraire de ce qu'il dit. Peut-être que c'est pour ça que tu t'es embrouillé.

+0

ça devrait être assertFalse, vous avez raison, c'est une faute de frappe de ma part, merci – Curtis

1

Quel problème rencontrez-vous?

Tout d'abord,

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

ne regarde pas droit. x va se terminer à la fin de votre chaîne (use x < s.length() à la place si vous voulez parcourir une chaîne). Mais les fonctions de niveau supérieur sont disponibles pour faire ce que vous voulez (voir les autres réponses ici).

0

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

2

Avec Java 6, vous pouvez simplement faire

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

Deux défauts: 1) C'est en fait Java 1.5. 2) Il ne compile pas. Il faut une 'CharSequence': http://java.sun.com/javase/6/docs/api/java/lang/String.html#contains%28java.lang.CharSequence% 29 – BalusC

0

Ou, essayez StringUtils.contains() de biens communs apache - qui traitera le cas String null pour vous.

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

+0

apache commons est un cancer de code mal conçu et mis en œuvre –

+0

En outre, en utilisant une bibliothèque tierce partie pour faire de telles choses élémentaires, est, IMO, pure folie. Je veux dire, si vous allez bourrer un pot dans votre application juste pour comparer une chaîne contre 'null' et faire un' contains (...) 'dessus, je me demande combien de jars 3ème partie seront là quand le l'application est expédiée! :) –

+0

+1 parce qu'un vote négatif semble terriblement dur. Apache commons est une bibliothèque largement acceptée et utilisée. Est-ce trop compliqué pour ce seul problème? Certainement. Est-ce que Java 1.5 et 1.6 ont rendu redondantes de nombreuses fonctions dans les communs? Ouaip. Mais sheesh ... –