2011-10-02 60 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; 
    } 

我尋找一個方法類似包含(上面的代碼),將做到這一點: 如果在草堆中存在針,否則會檢查針在草垛一個字符串的一部分。 在這種情況下(上面的代碼),如果我將文件轉換成乾草堆,以及提供針的文件,結果是相同的。但我不想那樣。例如:爪哇 - 尋找一個方法類似包含

File 1: 
i love beers 
i like travelling 
stackoverflow 
beers 

And File2 :  
beers 
i love stackoverflow 

那麼如果大海撈針來自文件1和針來自file2的,我希望得到的結果是2,因爲這個詞是啤酒部分或同一只乾草堆的兩個字符串。 (啤酒--->我喜歡啤酒和啤酒) - 沒有什麼事情發生在我愛的stackoverflow) 但是當乾草堆來自file2並且針來自file1時,我想要結果是2.(我愛啤酒不是部分或相同的與任何文件2,我喜歡旅行相同,stackoverflow是我愛的一部分stackoverflow -1-和最後啤酒是與啤酒-2-) 什麼是正確的方法呢? 正如我之前所說的包含給我同樣的結果,無論什麼文件是乾草堆或給針的字符串。

PS在我的例子中結果是一樣的,但我認爲這是隨機的。

我該怎麼做?

+0

結果在兩種情況下結果如何?如果文件1是乾草堆,則結果有一行,如果文件2是乾草堆,則結果有兩行。 –

+0

這是功課嗎?如果不是,那麼用例是什麼? –

+0

看起來你的'contains'函數有一些代碼。結果不會做你想要的。你需要弄清楚'contains'函數是不是做你想做的,或者它周圍的代碼是錯誤的。一個很好的方法是爲'contains'函數編寫單元測試。 –

回答

1

我認爲你的意思是這兩個值的值應該不一樣?你展示他們是一樣的。

如果您想在另一個字符串中查找字符串,請使用String對象的indexOf方法。例如:

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

將返回1.如果該值不存在,則該方法返回-1。

所以,如果你想在大海撈針中找到針,就意味着在每一行檢查一個文件中是否存在另一個文件中的一行。請記住,如果文件(及其中的行)很大,這意味着很多字符串處理,這可能會很慢。而且你必須在兩個方向上進行。首先,在文件1中獲取一行,並將其與文件2中的每一行進行比較(除非您找到匹配項,在這種情況下,您可以停止從文件1中查找該行)。然後移動到下一行中的文件1等

反向,並在文件從文件2尋找線11.

我不會描述所有的邏輯,但該部分不應該假設你知道如何打開文件和編寫循環,這太難了。