2013-06-12 2 views
2

는이 코드가 있습니다.contains를 배열의 모든 문자열을 검색하는 방법은 무엇입니까?

String[] whereyoufromarray = {"where", "you", "from"}; 

for (String whereyoufromstring : whereyoufromarray) 
{ 
    if (value.contains(whereyoufromstring)) { 
     //statement 
    } 
} 

을하지만 "값이"이있는 경우에만 문을 실행하면 모든 단어가 배열에 "당신은 어디에서인가?"같은 것을 포함 것을 원한다. 현재 값에 배열의 단어 중 하나만 있으면 명령문이 실행됩니다.

나는 이것을 if (value.contains("where") && value.contains("you") && value.contains ("from"))과 함께 할 수 있지만 이것은 불필요하게 길어 보인다. 제가 놓친 배열을 사용하여 해결 방법이 있어야합니다.

글쎄요, 무엇입니까?

p .: 불쌍한 문법입니다. 나는 수면 부족으로 고통 받고있다.

답변

2
String[] whereyoufromarray = {"where", "you", "from"}; 

boolean valueContainsAllWordsInArray = true; 
for (String whereyoufromstring : whereyoufromarray) { 

    // If one word wasn't found, the search is over, break the loop 
    if(!valueContainsAllWordsInArray) break; 

    valueContainsAllWordsInArray = valueContainsAllWordsInArray && 
            value.contains(whereyoufromstring); 

} 

// valueContainsAllWordsInArray is now assigned to true only if value contains 
// ALL strings in the array 
+0

이 좋은 간단하지만 내가 느끼는처럼 우리가해야 루프 중 적어도 휴식 별도의 작업이 필요한 경우 수행 할. – Zong

+0

@ ZongZhengLi 좋은 전화! 나는이 최적화를 추가했다. – mattgmg1990

+0

완벽. 고맙습니다! –

0
String[] whereyoufromarray = {"where", "you", "from"}; 
int arrayLength = whereyoufromarray.length; 
int itemCount = 0; 
for(String whereyoufromstring : whereyoufromarray) 
{ 
    if(value.contains(whereyoufromstring)) 
    { 
     itemCount++; 
    } 
} 
if (itemCount == arrayLength){ 
    //do your thing here 
} 

거친 아이디어. 필자는 이것을 증명할 IDE를 가지고 있지 않지만 기본적으로 알고있는 배열의 길이를 카운터로 설정 한 다음 배열의 각 값을 검사하여 일치하는 항목이 있는지 확인합니다. 계수기. 마지막으로 카운터를 테스트하여 배열 길이와 일치하는지 확인하십시오. 예에서 itemCount = 3이면 모든 값이 일치합니다. 2 인 경우 누락되어 메소드가 실행되지 않습니다.

2

이와 같은 경우에는 일반적으로 테스트를 수행하는 기능을 구현합니다. 현실을 부르 자 containsAll 나()

public static boolean containsAll(String[] strings, String test) 
{ 
    for (String str : strings) 
     if (!test.contains(str)) 
      return false; 
    return true; 
} 

그리고 지금 당신은 할

if (containsAll(whereyoufromarray, value)) 
    //statement 
+1

이것이 최선의 방법이라고 생각합니다. 아마도 C#이라면 확장 메소드에 넣을 수도 있습니다. – Zong

+1

좋은데, test가 null이면'for'의 직전에 false를 반환해야합니다. 'strings.length == 0'의 경우와 동일 –

+0

참. 분명히, 나는 그 세부 사항을 독자를위한 운동으로 생략했다. –

관련 문제