2010-03-24 116 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

相關問題