2010-03-24 2 views
3

제목에서 말하듯이, 문자가 문자열에 없는지 확인하기 위해 내 junit 테스트를 통과하는 데 문제가 있으며, 빈 문자열에 문자가 없는지 확인하는 방법이 있습니다. 여기char가 문자열에 없는지 테스트하는 방법은 무엇입니까?

 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 것() –

+0

일부 더 나은 형식의 코드와 그 우리가 당신을 도와 도움이 작동하지 않습니다 정확히 무엇인가의 명확한 설명. –

+1

나는 단지 당신이'assertFalse (notIn)'을 원한다고 생각한다. –

답변

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

이것은 훌륭하게 작동했는데, 내가 가질 수있는 방법이 없습니다. 그것을 보았습니다. sntnt가 null 인 경우 반환하고 값의 인덱스가 -1보다 크면 문자열과 문자열이 비어 있음을 의미합니다. 매우 고마워요! – Curtis

4

왜 이러는거야? 함수는 이미 String에 대한 메소드로 구현되어 있습니다. 대신 String.indexOf를 사용

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

을 나는 칼 Manaster이 특정 문제에 대한 의견에 옳다고 생각 - 당신은 여기 assertTrueassertFalse를 사용하지 않을해야합니다 여담으로

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

, notIn 끔찍한 이름입니다 그 변수는 정확히 말한 것과 반대입니다. 아마 당신이 혼란스러워하는 이유 일 수 있습니다.

+0

그것은 반드시 assertFalse 여야합니다. 올바른 것입니다. 내 부분에 타이핑 오류, 감사합니다 – Curtis

1

어떤 문제가 발생합니까?

첫째

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

가 제대로 보이지 않습니다. x은 문자열 끝에서 실행됩니다 (문자열을 반복하려는 경우 use x < s.length()). 그러나 더 높은 수준의 기능은 원하는 것을 수행하는 데 사용할 수 있습니다 (다른 답변은 여기 참조).

0

String.indexOf (char)가 -1을 반환하면 hasA가 false입니다. 그렇지 않으면 사실입니다. 자바 6

2

당신은

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

두 가지 결함 : 1) 실제로 자바 1.5입니다. 2) 컴파일되지 않습니다. 'CharSequence'를 취합니다 : http://java.sun.com/javase/6/docs/api/java/lang/String.html#contains%28java.lang.CharSequence % 29 – BalusC

0

을하거나,() 아파치 평민에서 StringUtils.contains을 시도 할 수 있습니다 - 당신을 위해뿐만 아니라 널 문자열 사건을 처리 할 것이다.

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

+0

apache commons는 잘못 설계되고 구현 된 코드 암입니다. –

+0

게다가, 초보자를위한 제 3 자 라이브러리를 사용하면, IMO, 광기의 광기입니다. 내 말은, 만약 당신이 단지 null을 상대로 String을 비교하고 그것에 contains (...)을하는 앱에 항아리를 채우는다면, 얼마나 많은 third party jars가있을 것인지 궁금합니다. 앱이 배송됩니다. :) –

+0

+1 투표가 끔찍한 가혹한 것 같습니다. Apache commons는 널리 사용되는 라이브러리입니다. 이 문제에 대한 과잉 공격일까요? 확실히. Java 1.5 및 1.6은 많은 공통 기능을 중복 시켰습니까? 예. 하지만 ... –

관련 문제