如何测试char是否不在字符串中? (java,junit)

时间:2010-03-24 21:10:28

标签: java string junit char

正如标题所说,我在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;

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

非常感谢,赞赏

6 个答案:

答案 0 :(得分:14)

改为使用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'));

答案 1 :(得分:4)

你为什么要这样做?您的函数已经作为String的方法实现。请改用String.indexOf

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

我认为Carl Manaster在关于您的具体问题的评论中是正确的 - 您需要assertFalse而不是assertTrue

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

顺便说一句,notIn对于该变量来说是一个可怕的名字 - 它与它所说的完全相反。也许这就是为什么你感到困惑。

答案 2 :(得分:2)

使用Java 6,你可以做到

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

答案 3 :(得分:1)

您遇到了什么问题?

首先,

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

看起来不正确。 x将在字符串的末尾运行(use x < s.length(),如果你想迭代一个字符串)。但是更高级别的功能可用于执行您想要的操作(请参阅此处的其他答案)。

答案 4 :(得分:0)

如果String.indexOf(char)返回-1,则hasA为false。否则,这是真的。

答案 5 :(得分:0)

或者,从apache commons尝试StringUtils.contains() - 它也将为你处理null String case。

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