正如标题所说,我在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 :(得分: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。