【问题标题】:How to test whether a char is NOT in a string? (java, junit)如何测试字符是否不在字符串中? (java,junit)
【发布时间】:2011-01-31 11:19:07
【问题描述】:

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

非常感谢,不胜感激

【问题讨论】:

  • isThere() 更好的名字是 containsChar()
  • 一些格式更好的代码和更清晰的解释究竟是什么不工作会帮助我们帮助你。
  • 我想你只是想assertFalse(notIn)
  • 你到底想在这里实现什么?您只是在复制已经存在的功能。
  • 应该是assertFalse,你是对的,这是我的打字错误,谢谢

标签: java string junit char


【解决方案1】:

使用 Java 6 你可以做到

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

【讨论】:

【解决方案2】:

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

【讨论】:

  • 这工作非常出色,我无法看到这一点。如果 s 不等于 null 并且值的索引大于 -1,则返回,这意味着它存在并且字符串不为空。非常感谢!
【解决方案3】:

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

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

我认为 Carl Manaster 在 cmets 中关于您的具体问题是正确的 - 您需要在这里使用 assertFalse 而不是 assertTrue

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

顺便说一句,notIn 对这个变量来说是一个糟糕的名字——它的意思与它所说的完全相反。也许这就是你感到困惑的原因。

【讨论】:

  • 应该是assertFalse,你是对的,这是我的打字错误,谢谢
【解决方案4】:

或者,试试 apache commons 中的 StringUtils.contains() - 它也会为你处理空字符串的情况。

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

【讨论】:

  • apache commons 是一个设计和实现不佳的代码毒瘤
  • 此外,使用 3rd 方库来做这些基本的事情,在 IMO 中简直是疯狂。我的意思是,如果你要在你的应用程序中填充一个 jar 只是为了比较一个 String 和 null 并在其上做一个 contains(...),我想知道当应用程序发布时会有多少 3rd 方 jars! :)
  • +1 因为投反对票似乎非常苛刻。 Apache commons 是一个被广泛接受和使用的库。就这一个问题来说是不是有点矫枉过正?当然。 Java 1.5 和 1.6 是否使许多公用功能变得多余?对。但是,嘘......
【解决方案5】:

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

【讨论】:

    【解决方案6】:

    你遇到了什么问题?

    首先,

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

    看起来不对。 x 将跑出你的字符串的末尾(use x &lt; s.length() 如果你想遍历一个字符串)。但更高级别的功能可用于执行您想要的操作(请参阅此处的其他答案)。

    【讨论】:

      猜你喜欢
      • 2012-04-25
      • 1970-01-01
      • 2018-06-24
      • 2013-10-28
      • 2014-01-15
      • 1970-01-01
      相关资源
      最近更新 更多