2011-10-02 2 views
-1
static boolean contains(Iterable<String> haystack, String needle) { 
    for (String s : haystack) { 
     if (s.contains(needle)) { 
     return true; 
     } 
    } 
    return false; 
    } 

    static void containsAll() throws IOException { 
    List<String> words = loadLines("opacial.txt"); 
    List<String> tocheck = loadLines("queries0.txt"); 
    System.out.println(words.size()); 
    System.out.println(tocheck.size()); 
    int index2 = 0; 
    for (String s : tocheck) { 
     if (contains(words, s)) { 
      index2++; 
      //return false; 

     } 

    } 
    System.out.println(index2); 
    //return true; 
    } 

내가하는 방법을 찾고 있어요 포함 같은 : 를 바늘이 건초 더미에 존재하는 경우, 또는 그것을 확인합니다 바늘은 건초 더미에서 문자열의 일부인 경우 . 그 경우 (위의 코드) haystack으로가는 파일과 바늘을주는 파일을 역으로 사용하면 결과는 같습니다. 하지만 나는 그걸 원하지 않아. 예를 들면 : 건초 더미 파일 (1) 바늘에서 오는 경우 자바 방법을 찾고 (코드 위)이 다할 것을 포함처럼

File 1: 
i love beers 
i like travelling 
stackoverflow 
beers 

And File2 :  
beers 
i love stackoverflow 

다음 파일 2에서 오는

, 나는 단어 맥주 파트 또는 유일한 건초 더미의 두 문자열과 동일하기 때문에 결과가이되고 싶어요. (beers ---> 나는 맥주와 맥주를 좋아한다) - 아무것도 stackoverflow를 좋아한다.) 하지만 haystack이 file2에서 왔고 바늘이 file1에서 왔을 때 나는 결과가 2가되기를 바란다. (맥주는 부분적으로 또는 동일하지 않다. 파일 2 아무것도, 나는 같은 여행을 좋아해요, stackoverflow 내가 stackoverflow -1- 사랑하고 마지막으로 맥주 맥주와 동일합니다 -2-) 그게 올바른 방법은 무엇입니까? 내가 전에 말했듯이 어떤 파일이 건초 더미이거나 바늘의 끈을 주더라도 동일한 결과를 제공합니다.

추신 : 결과는 동일하지만 무작위라고 생각합니다.

어떻게 할 수 있습니까?

+0

두 경우 모두 동일한 결과가 어떻게됩니까? 파일 1이 haystack이면 결과에 한 행이 있고, 파일 2가 haystack이면 결과에 두 행이 있습니다. –

+0

이 숙제가 있습니까? 그렇지 않다면, 유스 케이스 란 무엇입니까? –

+0

'포함'기능에 '주변'코드가있는 것 같습니다. 결과는 당신이 원하는 것을하지 않습니다. '포함'기능이 원하는 것을 수행하지 못하거나 그 코드가 잘못되었는지 파악해야합니다. 이를 수행하는 좋은 방법은 'contains'함수에 대한 단위 테스트를 작성하는 것입니다. –

답변

1

두 경우 모두 값이 다를 수 있다는 것을 의미한다고 생각하십니까? 당신은 그들을 똑같은 것으로 보여줍니다.

다른 문자열 내의 문자열을 찾으려면 String 개체의 indexOf 메서드를 사용하십시오. 예를 들면 다음과 같습니다.

String s = "abcdef"; 
s.indexOf("b"); 

은 1을 반환하고, 값이 없으면 -1을 반환합니다.

건초 더미에서 바늘을 찾으려면 모든 파일 하나의 파일에서 다른 파일에있는 행이 있는지 확인해야합니다. 파일 (및 그 안에있는 행)이 큰 경우 이는 많은 문자열 처리를 의미하므로 속도가 느릴 수 있습니다. 그리고 당신은 양방향으로해야 할 것입니다. 먼저, 파일 1의 행을 가져 와서 파일 2의 모든 행과 비교하십시오 (일치하는 행을 찾지 못하는 경우 파일 1에서 행 찾는 것을 중지 할 수 있습니다). 그런 다음 등

파일 1, 역에서 다음 행으로 이동하고, 파일에 파일 2에서 1 호선을 찾아 1.

나는 모든 논리를 설명하지만,하지 않습니다 그 부분은 안 파일을 열고 루프를 작성하는 방법을 알고 있다고 가정하면 알아 내기가 너무 어렵습니다.

관련 문제