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

从文本文件中搜索并显示ArrayList的内容

章昆琦
2023-03-14

我已经创建了一个歌曲类,其中包括歌曲(标题、艺术家、专辑)的数据成员。我已经有了一个包含不同歌曲的. txt文件,该文件存储在数组列表中。在我的主类中,功能之一是允许用户通过标题、艺术家或专辑搜索歌曲。

我的问题是,当用户输入某些标题时,搜索功能无法找到歌曲。例如,当我搜索歌曲标题“停留”时,它会找到它。但是,当我搜索名为“波西米亚狂想曲”的歌曲时,它找不到存储的歌曲。我知道它是存储的,因为当我显示列表时,它会显示出来。按唱片集或艺术家搜索时也会出现此问题。

我认为我的问题是由于我分割字符串的方式造成的,或者可能只是搜索函数本身的问题。

这是我的Song类,包含构造函数和Get/Set方法

public class Song {
    //Declaring all data members.
    private String title;
    private String artist;
    private String album;
    private String length;
    private static int songCounter = 0;

    //Constructors for Song class.      
    public Song(String title, String artist, String album, String length){
        this.title = title;
        this.artist = artist;
        this.album = album;
        this.length = length;
        songCounter++;
    }
    //Get and Set methods 
    public String getTitle(){
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getArtist(){
        return artist;
    }

    public void setArtist(String artist) {
        this.artist = artist;
    }

    public String getAlbum(){
        return album;
    }

    public void setAlbum(String album){
        this.album = album;
    }

    public String getLength(){
        return length;
    }

    public void setLength(String length){
        this.length = length;
    }

    public static int getSongCounter(){
        return songCounter;
    }
    //Overriding the toString() function.
    public String toString(){
        return title +" "+artist+" "+album+" "+length;
    }
 }

这是我的主课,从。txt文件,包括搜索方法

public class Library {

public static void main(String[] args) {
    ArrayList <Song> songList = new ArrayList <Song> ();
    boolean testInput = true;

    try{
        Scanner read = new Scanner (new File("SongList.txt"));
        do{
            String line = read.nextLine();
            String [] tokens = line.split(",");
            songList.add(new Song(tokens[0], tokens[1], tokens[2], tokens[3]));
        }while(read.hasNext());
        read.close();
    }catch (FileNotFoundException e){
        System.out.println("File not found.");
    }

    while ( testInput ){
        System.out.println("\nSelect a Function");
        System.out.println("1. Search Song");
        System.out.println("2. Add Song");
        System.out.println("3. Delete Song");
        System.out.println("4. Display Songs");
        System.out.println("5. Quit");

        switch (MenuInputCheck(1, 5)){

        case 1: searchSong(songList);
                break;
        case 2: addSong(songList);
                break;
        case 3: deleteSong(songList);
                break;
        case 4: displaySong(songList);
                break;
        case 5: testInput = false;
                break;
        }
    }
}

public static void searchSong(ArrayList <Song> songList){
    Scanner input = new Scanner(System.in);
    System.out.println("A. Search by Title");
    System.out.println("B. Search by Artist");
    System.out.println("C. Search by Album");

    boolean found = false;
    char menuOption = input.next().charAt(0);

    switch (menuOption) {
    case 'A':
    case 'a': System.out.print("Enter song title: ");
              String searchTitle = input.nextLine();
              for (Song i : songList){
                  if (i.getTitle().equals(searchTitle)){
                      System.out.println(i);
                      found = true;
                  }
              }
              if ( found != true ){
                  System.out.println("Song does not exist.");
              }
              break;
    case 'B':
    case 'b': System.out.print("Enter song artist: ");
              String searchArtist = input.nextLine();
              for (Song i : songList){
                  if (i.getArtist().equals(searchArtist)){
                      System.out.println(i);
                      found = true;
                  }
              }
              if ( found != true ){
                  System.out.println("Song does not exist.");
              }
              break;
    case 'C':
    case 'c': System.out.print("Enter song album: ");
              String searchAlbum = input.nextLine();
              for (Song i : songList){
                  if (i.getAlbum().equals(searchAlbum)){
                      System.out.println(i);
                      found = true;
                  }
              }
              if ( found != true ){
                  System.out.println("Song does not exist.");
              }
              break;
    }
}

共有1个答案

赵英范
2023-03-14

更改String searchArtist=input。next() 字符串搜索艺术家=输入。nextLine()

使用. Next()您不能输入超过1个单词。当收到空格时,它将停止捕获进一步的输入。

我建议您将所有3种输入扫描方法更改为。nextLine()

 类似资料:
  • 我对JavaFX和JavaFX Scene Builder是新手,几个星期以来一直在研究并试图弄清楚如何简单地从文本文件中读取并在文本中显示其内容。我的controller类中有一个很好的文件读取功能,但我不知道如何将文本文件显示到fxml文档中的文本区域。我已经学会了如何单击按钮并使文件显示在文本区域中,但我希望GUI加载后立即在文本区域中显示内容。如果任何人有一个想法如何去做这件事,你的帮助将

  • 问题内容: 我已经从配置文件构造了Build版本,并将该版本号值保存到了我的工作空间中的文件中。该文件的内容将包含类似2014.4.3.87的值 现在,我需要将此值传递给Jenkins电子邮件正文。我已经安装了电子邮件扩展插件。我该怎么做。 问题答案: 您可以使用shell命令回显文件内容并将其保存到另一个文件中,例如content =“ real content” 例如: 您可以使用env in

  • 我试图实现与linq文本搜索。我有一个用电子邮件数据填充的消息表。我想能够在消息体中搜索。然而,电子邮件正文很长,我想只显示搜索文本的一小部分,例如,如果我搜索: 奥特 在以下案文中: 知识产权是一种权利,是一种精英的权利,是劳动和财富的暂时性权利。但是,在最低限度上,我们需要一个实验室来进行日常工作。两人或两人在一个无教区的房间里互相指责。除偶尔因疏忽而死亡外,不得因疏忽而导致动物死亡。 结果应

  • 我正在编写一种方法来搜索列表形式的文字文件,搜索用户输入的文字,但如果找到一个字母,程序将返回一个肯定的结果。例如,如果我搜索“f”,当没有单词时,它将返回字典中有一个单词“f”

  • 我有一个反应原生应用程序,我有一个搜索栏和一个FlatList。我的搜索逻辑如下 搜索栏: FlatList: 渲染项: 项目组成部分: 我想要一个搜索过滤器高亮显示,如下所示,当我开始在搜索栏中键入文本时,平面列表中的文本必须高亮显示。 我如何实现这个??反应本族语突出词?有什么功能吗?请帮忙

  • 我想在CMD窗口中显示文本文件的内容。此外,我希望看到添加到文件中的新行,如Unix中的tail-f命令。