【问题标题】:how to search through a String collection for a match of 3 characters or more如何在字符串集合中搜索 3 个或更多字符的匹配项
【发布时间】:2017-01-15 04:14:41
【问题描述】:

我正在尝试制作一个可以搜索名称集合并返回与您搜索的名称接近的应用程序。示例:搜索 jos,并在 JList 中返回 jose、josie 和 josh。

这是我用作原型的代码:

public class Window {

private JPanel pan;
private String[] names1 = {"lewis","joe","jack","ryan","kane","google","brooke"};
private LinkedList<String> names;
private String[] name;
private JTextField enterbar;
private JButton btn;
private JTextField enterbar2;
private JButton btn2;

public Window(){

    enterbar = new JTextField(10);
    btn = new JButton("enter");
    enterbar2 = new JTextField(10);
    btn2 = new JButton("Add");


    names = new LinkedList<String>();
    names.add("rose");
    pan = new JPanel();
    Font f1 = new Font("ariel", 0 , 20);
    JFrame frame = new JFrame("Contact Saver");
    DefaultListModel v = new DefaultListModel();
    v.addElement(names);
    JList list = new JList(v);

    list.setVisibleRowCount(4);//sets how many elements you can see and if    there is more it adds a scroll bar
    list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);//makes it so you can only select one element at a time
    list.setFixedCellWidth(600);
    list.setFixedCellHeight(30);
    list.setFont(f1);

    frame.add(enterbar);
    frame.add(btn);
    frame.add(enterbar2);
    frame.add(btn2);
    pan.add(new JScrollPane(list));
    frame.add(pan);//adds a scroll bar to the list

    frame.setLayout(new FlowLayout());
    frame.setSize(700,500);     
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setLocationRelativeTo(null);
    frame.setResizable(false);
    frame.setVisible(true);

    list.addListSelectionListener(new ListSelectionListener(){
        public void valueChanged(ListSelectionEvent event) {
            System.out.println("here");
        }
    });
    btn.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent event) {
            v.clear();
            if(names.contains(enterbar.getText().toLowerCase()))System.out.println("here");

            for(int i =0; i < names.size();i++){
            v.addElement(names.get(i));
        }
            System.out.println(v);
        }

    });

    btn2.addActionListener(new ActionListener(){

        @Override
        public void actionPerformed(ActionEvent e) {
            v.clear();
            names.add(enterbar2.getText());
            for(int i =0; i < names.size();i++){
                v.addElement(names.get(i));
            }
        }

    });

}

public static void main(String args[]){
    new Window();
}

}

【问题讨论】:

  • 那你想问什么?
  • @minigeek 如何搜索我的姓名集合并找到具有共同字符序列的姓名

标签: java search collections


【解决方案1】:

创建 Levenshtein 距离公式的实现,当您遍历列表时,为每个列表分配一个距离值并返回最低 n 个值。

【讨论】:

    【解决方案2】:

    您可以详细阅读 find() 方法。 find() 找出给定字符串数组中的子字符串以供参考参见示例:

     1:Pattern.compile("[a-z]");
     2:Pattern.matcher("0a1b1c3d4"); 
     3:int count = 0; 
     4:while(matcher.find())
     { 
     5:count++;
     }
    

    【讨论】:

      猜你喜欢
      • 2017-12-17
      • 2017-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-20
      相关资源
      最近更新 更多