按作者搜索返回整个列表

问题描述

我有一个小问题,我卡住了。

我写了一个代码,用于在 .txt 文件中按书名和作者姓名搜索一些书,但问题是它在按书名和书作者搜索时起作用,它只在书名中输入没有作者,但是当我尝试仅通过没有书名的作者进行搜索时,它会返回整个 .txt 文件,而不是作者写的书。我似乎无法找到问题所在。我是新手。这是代码。而 .txt 文件是这样写的:

饥饿游戏,苏珊娜柯林斯(以“,”作为标题和作者之间的界限) 以及更多书籍

package com.carti;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.io.BufferedReader;
import java.awt.event.ActionListener;
import java.io.FileReader;
import java.io.IOException;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {
        JFrame frame=new JFrame("Carti");
        JButton cauta=new JButton("Cauta");
        cauta.setBounds(300,10,70,60);
        frame.add(cauta);
        frame.setSize(1000,1000);

        JLabel carteLabel = new JLabel("Carte:");
        carteLabel.setBounds(10,60,30);
        frame.add(carteLabel);

        JLabel autorLabel = new JLabel("Autor:");
        autorLabel.setBounds(10,40,100,30);
        frame.add(autorLabel);

        JTextField carte=new JTextField();
        carte.setBounds(70,200,30);

        frame.add(carte);

        JTextField autor=new JTextField();
        autor.setBounds(70,30);

        frame.add(autor);

        DefaultListModel<String> carti = new DefaultListModel<>();
        BufferedReader bf = new BufferedReader(new FileReader("carti.txt"));
        String line;
        while((line=bf.readLine()) != null){
            carti.addElement(line);
        }

        JList<String> cartiJList = new JList<>(carti);
        cartiJList.setBounds(20,90,400,900);
        frame.add(cartiJList);

        DefaultListModel<String> rezultat = new DefaultListModel<>();
        JList<String> rezultatJList = new JList<>(rezultat);
        rezultatJList.setBounds(430,900);
        frame.add(rezultatJList);

        cauta.addActionListener(new ActionListener()
        {
            @Override
            public void actionPerformed(ActionEvent e)
            {
                rezultat.clear();
                String searchCarte = carte.getText().trim().toupperCase();
                String searchAutor = autor.getText().trim().toupperCase();

                for (int i = 0; i < carti.size(); i++)
                {
                    String book = carti.get(i);
                    StringTokenizer st = new StringTokenizer(book,",");
                    String bookToken = st.nextToken();
                    String authorToken = st.nextToken();

                    if(searchCarte.length() != 0 && searchAutor.length() != 0)
                    {
                        if(bookToken.toupperCase().contains(searchCarte) && authorToken.toupperCase().contains(searchAutor))
                        {
                            rezultat.addElement(book);
                        }
                    }else if(bookToken.length() != 0)
                    {
                        if(bookToken.toupperCase().contains(searchCarte))
                            rezultat.addElement(book);
                    }
                    else if(authorToken.length() != 0 )
                        {
                        if(authorToken.toupperCase().contains(searchAutor))
                            rezultat.addElement(book);
                        }
                }
            }
        });
        frame.setLayout(null);
        frame.setVisible(true);
    }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)