2015-09-08 70 views
1

我有一個長文本存儲在String(即tstr1 im代碼)。現在我想將來自控制檯的用戶輸入存儲在String[](即itemsFromArray im代碼)中。對於Java中每個循環的字數爲

我想要爲存儲在用戶輸入String []數組中的每個單詞顯示該單詞出現在長文本字符串[]數組中的次數。我以這種方式嘗試過,但問題在於系統僅顯示數組中的第一個條目的計數,但下一個顯示爲零。

btnNewButton.addActionListener(new ActionListener() 
    { 
     public void actionPerformed(ActionEvent e) 
     { 
      keyW = txtKeyword.getText(); 
      search = textField.getText(); 
      System.out.println("String for car = " + search); 
      System.out.println("String keyword = " + keyW); 

     WebDriver driver = new FirefoxDriver(); 
     driver.get("https://en.wikipedia.org/wiki/" + search); 
     tstr1 = driver.findElement(By.xpath("//*[@id='content']")).getText(); 

     String [] itemsFromArray = keyW.split(","); 
     Map<String, Integer> map = new HashMap<String, Integer>(); 
     for (String word : itemsFromArray){ 
      map.put(word, 0); 
     } 
     Scanner s = new Scanner(tstr1); 
     while (s.hasNext()){ 
      String word = s.next(); 
      if (map.containsKey(word)){ 
       map.put(word, map.get(word) + 1); 
       System.out.println("Word1 '" + word + "' count:" + map.get(word)); 
      } else { 
       System.out.println("Word2 '" + word + "' not in map"); 
      } 
     } 

     driver.close(); 
     } 
    }); 
+2

您可能想要使用Map (字 - >數)。 –

+0

迭代輸入字符串並將計數(對於每個單詞)存儲在映射中,其中單詞是鍵,值是計數。 –

+0

我真的不明白怎麼做,請你詳細解釋一下。謝謝!!! –

回答

2

它可能更好地使用Map<String, Integer>

// initialize a mapping that is used to map words to their count 
Map<String, Integer> counter = new HashMap<String, Integer>(); 

// initialize all counts to 0 
for (String word : itemsFromArray){ 
    counter.put(word, 0); 
} 

// ... 

// count words that are in map (give up those that aren't) 
while (s.hasNext()){ 
    String word = s.next(); 
    if (counter.containsKey(word)){ 
     counter.put(word, counter.get(word) + 1); 
     System.output.println("Word '" + word + "' count:" + counter.get(word)); 
    } else { 
     System.output.println("Word '" + word + "' not in map"); 
    } 
} 
+0

親愛的Sharabani,它顯示了其他任何東西,但我設置的關鍵字沒有顯示。但是我在''while'上面添加了'Scanner s = new Scanner(tstr1);'。 –

+0

這不是要處理初始化,只是告訴你如何使用映射來計算單詞。我把這個範圍之外的一切都拋出 –

+0

看,該文本中的每一個字都顯示,包括我的數組中的第一個關鍵字,如何顯示數組中的所有關鍵字? –

1

我花了一天後,問題是,當我試圖將字符串(沒有逗號)分離並插入到陣列中,第一字符串很好,但接下來以空格開始,系統無法識別該字詞。

btnNewButton.addActionListener(new ActionListener() 
    { 
     public void actionPerformed(ActionEvent e) 
     { 
      //If the button UPLOAD was not pressed we should to clear the ArrayList 
      listKeys.clear(); 
      ////////////////////////////////////////////// 

      if(textField.getText().equals("")) { 

       JOptionPane.showMessageDialog(null,"Make sure you enter at least one search key"); 

      } 

     else if (txtKeyword.getText().equals("")) { 

      System.out.println("String is NULL "); 

      JOptionPane.showMessageDialog(null,"Add at least one keyword"); 
     } else { 

      keyW = txtKeyword.getText(); 
      search = textField.getText(); 
      System.out.println("String for car = " + search); 
      System.out.println("String keyword = " + keyW); 

     WebDriver driver = new FirefoxDriver(); 
     driver.get("https://en.wikipedia.org/wiki/" + search); 
     tstr1 = driver.findElement(By.xpath("//*[@id='content']")).getText(); 

     String [] items = keyW.split(","); 
     String [] itemsFromArray = new String[items.length]; 
     for (int i = 0; i < items.length; i++) 
     { 
      itemsFromArray[i] = items[i].trim(); 
     } 
      for(String string : itemsFromArray) 
     {  
      //if (args[i].toLowerCase().startsWith(­ "from:")) 

      System.out.println("FOREACH " + string); 
      int i = countWords(tstr1, string); 
      System.out.println("Word count "+ string + ": " + i); 
      Keyword1 = ("Count for word " + string + " are " + i); 
      listKeys.add(Keyword1); 
     } 
    driver.close(); 
    } 

     } 




private static int countWords(String tstr1, String string) 
    { 
     int i = 0; 
     Scanner s = new Scanner(tstr1); 

     while (s.hasNext()) 
     { 
      if (s.next().equals(string)) 
       i++; 

     } 

     return i; 
    } 
}