2010-03-24 152 views
3

正如标题所说,即时通讯测试我的junit测试传递检查一个字符是否不在字符串中,以及如何检查一个空字符串是否有字符。这里是方法我有:如何测试字符是否不在字符串中? (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; 

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

非常感谢你,感谢

+0

一个更好的名字这isThere()将containsChar() – 2010-03-24 21:13:14

+0

一些更好的格式化代码和它到底是什么不工作将帮助我们来帮助你更清楚的解释。 – 2010-03-24 21:13:24

+1

我想你只是想'assertFalse(notIn)' – 2010-03-24 21:14:23

回答

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

这工作出色,没有办法,我可以有如果s不等于null并且值的索引大于-1,意味着它在那里,并且字符串不为空,则返回。非常感谢! – Curtis 2010-03-24 21:25:27

4

为什么你在做这个吗?你的函数已经作为String方法实现了。使用String.indexOf代替:

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

我认为卡尔Manaster是正确的关于您的特定问题的意见 - 你需要在这里使用assertFalseassertTrue

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

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

+0

它应该是assertFalse,你是对的,那就是我的部分输入错误,谢谢 – Curtis 2010-03-24 21:27:35

1

你遇到什么问题?

首先,

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

看起来不正确的。 x将跑出你的字符串的末尾(use x < s.length(),而不是如果你想迭代一个字符串)。但更高级别的功能可用于做你想做的事(见这里的其他答案)。

0

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

2

利用Java 6,你可以做

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

两个缺陷:1)它实际上是Java 1.5。 2)它不编译。它需要一个'CharSequence':http://java.sun.com/javase/6/docs/api/java/lang/String.html#contains%28java.lang。CharSequence%29 – BalusC 2010-03-24 21:24:55

0

或者,尝试()从Apache的百科全书StringUtils.contains - 将处理空字符串情况下你。

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

+0

apache commons是一个设计不佳和实施的代码癌 – 2010-03-24 21:19:15

+0

此外,使用第三方库做这样的基本事情,是IMO,纯粹的疯狂。我的意思是,如果你打算在你的应用中加入一个jar来比较一个String和'null'并且在它上面做一个'contains(...)',我想知道有多少第三方jar会在那里应用程序已发货! :) – 2010-03-24 21:26:43

+0

+1,因为反对票看起来很糟糕。 Apache commons是一个被广泛接受和使用的库。这仅仅是一个问题的矫枉过正?当然。 Java 1.5和1.6是否使得commons中的许多功能成为冗余?对。但是sheesh ... – 2010-03-24 22:03:10

相关问题