当前位置: 首页 > 知识库问答 >
问题:

如何在LinkedList中搜索特定单词并返回它在列表中的位置以及出现次数[重复]

高峻
2023-03-14

我有一个问题,因为我需要搜索我创建的链表并输出指定单词出现的次数以及列表中单词出现的位置。这一切都是在JavaGUI中完成的,其中特定单词的输入是使用文本字段完成的。我在代码中遇到麻烦的特定按钮是“搜索列表”按钮,我已经将代码添加到其中,但我仍然没有得到我需要的结果。

在此方面的任何帮助都将不胜感激!

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.LinkedList;
import java.util.TreeMap;

public class Main {

public static void main(String[] args) {
FilledFrame frame = new FilledFrame();

frame.setVisible( true );
frame.setSize(1000, 1000);
frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
frame.setTitle("Word List");
}
}

class  FilledFrame extends JFrame{
JLabel     addWord;
JTextField addW;
JTextArea wordArea;

// Creating linked list
private LinkedList<String> wordList = new LinkedList();

public FilledFrame(){

    //Create JTextArea
    wordArea                = new JTextArea();

    //Create all the buttons, JLabel and the JPanel
    JButton addButton       = new JButton("Add Word");
    JButton specifiedLetter = new JButton("Display Specific Letter");
    JButton searchList      = new JButton("Search List");
    JButton removeLastOcc   = new JButton("Remove Last");
    JButton removeAll       = new JButton("Remove All Word Occurrence's ");
    JButton clearList       = new JButton("Clear List");

    JPanel panel            = new JPanel();

    //Add buttons and label to the window

    panel.add(addButton);
    add(panel, BorderLayout.NORTH);

    panel.add(specifiedLetter);
    add(panel, BorderLayout.NORTH);

    panel.add(searchList);
    add(panel, BorderLayout.NORTH);

    panel.add(removeLastOcc);
    add(panel, BorderLayout.NORTH);

    panel.add(removeAll);
    add(panel, BorderLayout.NORTH);

    panel.add(clearList);
    add(panel, BorderLayout.NORTH);


    //Create all Text Fields and Labels
     addWord          = new JLabel("Enter word");

     addW             = new JTextField(20);

    JPanel panel1     = new JPanel();

    //Add labels and text fields to the window
    panel1.add(addWord);
    add(panel1, BorderLayout.SOUTH);
    panel1.add(addW);
    add(panel1, BorderLayout.SOUTH);


    //Add JTextArea to the center and make sure user cannot type into it
    add(wordArea, BorderLayout.CENTER);
    wordArea.setEditable( false );


    //  Action listeners for each button

    addButton.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {

            wordList.add((addW.getText()));
            wordArea.setText(" The word " + addW.getText() + " was added to the list ");
            System.out.println(wordList);
        }
    });

    specifiedLetter.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {


        }
    });

    //The button I am having trouble with

    searchList.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            String showWord = "";
            TreeMap<String, Integer> treeMap = new TreeMap<>();

            if ((addW.getText()).length() < 1){
               for(String word : wordList)
               {
                    treeMap.put(word, 1);
                    treeMap.keySet().contains(word);

                    if (treeMap.containsKey(word)) {
                        treeMap.replace(word, treeMap.get(word)+1);
                    }
                    else{
                        treeMap.put(word, 1);
                    }
               }

                wordArea.setText(showWord);
                for (String word: wordList){
                    System.out.println(" This word appears " + word);
                }

            }

            }


        });

共有2个答案

邢灿
2023-03-14
匿名用户

试试这个解决方案:

Map<String, List<Integer>> map = new HashMap<>();
IntStream.range(0, list.size())
         .forEach(i -> {
             map.computeIfAbsent(list.get(i), s -> new ArrayList<>()).add(i);
         });

它将把所有索引存储在列表地图中。现在,您可以通过映射轻松获得索引。通过映射获取(str)或发生次数。获取(str)。size()。

请注意,此解决方案一次执行所有操作。因此,您不需要迭代任何集合两次。

禄奇希
2023-03-14

您可以使用java 8中的Collector将您编写的整个逻辑替换为简单的行:

 Map<String, Long> collect = list.stream()
          .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));

在这里,您将获得地图

要找到它出现的位置,您可以遍历列表并从刚刚创建的map中找到单词的第一次出现。

 类似资料:
  • 我使用了COUNT函数来确定一个表中有多少行,或者一个值在一个表中出现的频率。 但是,我希望以单独列的形式返回表中多个值的计数。 假设我们有一个包含列的customer表;客户ID、姓名、电话号码 假设我们还有一个包含以下列的销售表:客户ID、购买的商品、日期 我希望我的查询返回一列客户ID和一列客户ID在sales表中出现的次数。我想一次对我所有的客户ID执行此操作--有什么提示吗?

  • 我实际上是一个新手到Java,并试图做一个小项目。所以,在我的项目中,我想让用户输入一个句子,我想让程序在句子中搜索特定的单词,并基于此给出输出。我使用NetBeans开发我的应用程序。 我的代码是这样的 我知道这段代码没有意义,也不会运行,但我这样说是为了让人们对我试图实现的目标有一个大致的了解。 请帮帮我.

  • 问题内容: 好,所以我有两个桌子。表1具有参考数字列(A),第二列具有随机字符串(B)。表2只有一列,其中列出了可能在表1的字符串中也可能不在字符串中的值。 dbo.Tbl_1 dbo.Tbl_2 哪种SQL查询将确定在Table1的字符串中找到Table2的值的次数是多少?基本上我想返回以下结果集: 仅供参考:实际上,表2具有大约200条唯一记录。表1记录了约160万条记录,并带有唯一的参考号。

  • 寻求帮助,从一个数据帧中搜索多个特定单词,在另一个数据帧的列(正文)中搜索,然后将这些值提取到新的列中。 进一步解释: < li >首先,我有一个数据框架,其中包含14个国家的大量文本摘要。 < li >其次,我有第二个数据框架,其中包含所有行政级别(lvl_2)名称,如省、村等。 < li >我想从大型摘要中提取所有提及adm2省/村名称的内容,并为每个单词创建一个新列,旋转更长时间。 这里有一

  • 我试图写一个代码,将电影存储在一个列表中,我可以通过要求添加一个电影的位置或检查它是否在列表中检索。到目前为止,我一直致力于检索部分,但我一直得到一个错误,其中"描述符'索引'的'列表'对象不适用于'str'对象"。这是目前为止我的代码

  • 我想从这个句子中得到单词的索引。但在这里,我不想检查一个特定的单词。我有一个单词列表,我想从列表中获得句子中任何单词第一次出现的索引 我希望索引从结果索引开始,获取句子的子字符串。 我试着编写一些代码,但不知道如何获取字符串的索引。 输入: 句子: 搜索词的数组列表: 预期输出:索引为4(因为rahul在句子中排在第一位)