2013-12-11 161 views
-3

我正在編寫一個加載字符串ArrayList的代碼,並檢查是否使用了特定的單詞。這聽起來很奇怪,但具體是:搜索特定字符

包含「嘟嘟」(任何大寫字母,並允許零(0)代替哦(o),例如「to0t」)的嘟嘟數也應計算在內)。然而,如果它只包含「toot」作爲另一部作品的一部分,則不應該算作一個toot,例如,「tooter」不足以數出一個toot。

我已經嘗試了很多事情,但它似乎沒有工作...

這裏是我寫的:

for (String toot : toots) { 
    toot.toLowerCase(); 
    toot.replace("0", "o"); 
} 
tootsWithToot = 0; 
for(int i=0; i<toots.size(); i++){ 
    if(toots.get(i).contains("toot ") || toots.contains(" toot ") 
             || toots.contains(" toot.") 
             || toots.contains(" toot") 
             || toots.contains("toot")){ 
     tootsWithToot++; 
    } 
} 
+0

請再具體些。 – Rafa

+0

它不計算正確的結果,它讀取像「tooter」這樣的詞作爲「嘟嘟」 – user3089390

回答

2

字符串是不可變

toot.toLowerCase(); 
toot.replace("0", "o"); 

什麼都不做,你必須把它分配回嘟嘟

toot = toot.toLowerCase(); 
toot = toot.replace("0", "o"); 
+0

如何?回到ArrayList? – user3089390

0

您可以使用ListIterator更好地執行此操作。繼續迭代並插入處理過的字符串。

 /** 
     * Preprocess the list 
     */ 
     ListIterator<String> iterator = toots.listIterator(); 
     while (iterator.hasNext()) { 
      String toot = iterator.next(); 
      iterator.remove(); 
      iterator.add(toot.toLowerCase().replace("0", "o")); 
     }     
     int tootsWithToot = 0; 
     for(int i=0; i<toots.size(); i++){ 
      if(toots.get(i).contains("toot ") || toots.contains(" toot ") 
        || toots.contains(" toot.") 
        || toots.contains(" toot") 
        || toots.contains("toot")){ 
       tootsWithToot++; 
      } 
     } 
+0

我不熟悉ListIterator(仍然是新手),這是我需要的嗎? – user3089390

+0

是的!所有這段代碼假設是toots是一個ArrayList 這就是你在你的問題中提到的。最好是用你的數據集嘗試它,看看它是否適合你。 –

0

試試這個..希望代碼解釋..

 int tootsWithToot = 0; 
     for (String toot : toots) { 
     toot = toot.toLowerCase().replaceAll("0", "o").replaceAll("toots", "toot"); 
     //here add anything which need to skip.. 
     if(toot.contains("toot")) 
     { 
      StringTokenizer str = new StringTokenizer(toot," "); 
      /*space is token 
      [ suppose toot. it will not pass if u want to pass toot. than 
      add in replaceAll("toot.", "toot") just make all passed strings to 'toot'] 
      */ 
      while(str.hasMoreTokens()) 
      { 
       if(str.nextToken().equalsIgnoreCase("toot")) 
       { tootsWithToot++; break;} 
      } 

     }    
    } 
    System.out.println("tot:" +tootsWithToot); 
+0

你曾經爲一個人工作,但不是全部。它不適用於這句話:「你好嘟嘟你好」 它應該計數 – user3089390

+0

你能指定所有的輸入場景..? – Neha

+0

每一行是一個單獨的消息 「1根茨2個t00ts」 「嘟」 「會回來」 「tooter tooting」 結果應顯示2作爲tooter和tooting不是字「嘟嘟」有或沒有O或0的變化。 – user3089390