简体   繁体   English

在arraylist中搜索字符串并打印字符串

[英]Search an arraylist for a string and print the string

I'm trying to search an arrayList for a string specified by user input, then print the result of that search to the console. 我正在尝试在arrayList中搜索用户输入指定的字符串,然后将该搜索的结果打印到控制台。 I understand I should be using toIndex() but I can't work out how to syntax it. 我知道我应该使用toIndex()但我无法弄清楚如何对它进行语法化。

import java.util.*;

public class searchSongs {

    public static void main(String[]args){

        Scanner searchBar = new Scanner(System.in);
        System.out.println("Enter song title");
        String search = searchBar.nextLine().toUpperCase();

            for (int i = 0; i< MP3_catalogue.artist.size(); i++){
                if (MP3_catalogue.artist.contains(search)){
                    int SV = search.indexOf(search);
                    System.out.println(MP3_catalogue.title.get(SV));
                    System.out.println(MP3_catalogue.artist.get(SV));
                    System.out.println(MP3_catalogue.duration.get(SV));
            }
        }

        MP3_catalogue obj = new MP3_catalogue();
    }
}

EDIT: The main class is MP3_catalogue which contains the arrayLists. 编辑:主类是MP3_catalogue,其中包含arrayLists。 No need to do anything special with the other arrayLists they have the same index values as artist 无需对其他arrayList执行任何特殊操作,它们具有与artist相同的索引值

import java.util.*;

public class MP3_catalogue {
    static String gotoMenu = new String();

//"gotoMenu" is variable used to return to menu after each interaction with the methods.

public static ArrayList<String> title = new ArrayList<String>(); 
public static ArrayList<String> artist = new ArrayList<String>();
public static ArrayList<String> duration = new ArrayList<String>();

//arrayLists for song elements

@SuppressWarnings("resource")
public static void main(String[]args){
    System.out.println("Welcome to your music catalogue. \n \n" + "Menu choices:");
    System.out.println("A to add songs\n" + "D to delete songs\n" + "S to search catalogue\n" + "C to change song\n" + "? to shuffle catalogue\n");

    gotoMenu = "Y"; 
    while (gotoMenu.equals("Y")){
    System.out.println("Enter your choice:"); 

    Scanner userOption = new Scanner(System.in); //scanner to choose menu option
    String choice = userOption.nextLine().toUpperCase();

        switch (choice) {//switch statement used to go to each menu option

        case "A": addSongs.main(args);//executes addSongs
            System.out.println("Would you like to return to menu? Press Y to return, press N to exit program.");//choice to return to menu
            String goback = userOption.nextLine().toUpperCase();
            if(goback.equals("N"))
            {
                gotoMenu = "N";
            }
            break;

        case "D": deleteSongs.main(args);
            System.out.println("Would you like to return to menu? Press Y to return, press N to exit program.");//choice to return to menu
            String returnMenu = userOption.nextLine().toUpperCase();
            if(returnMenu.equals("N"))
            {
            gotoMenu = "N";
            };
            break;

        case "S": searchSongs.main(args);
                    gotoMenu = "N";
            break;
        case "C": System.out.println("Change songs");
                    gotoMenu = "N";
            break;
        case "?": System.out.println("Shuffle time");
                    gotoMenu = "N";
            break;
        default: System.out.println("Doesn't match a menu choice. Type more carefully this time.");
            break;

        }
    }
}

} }

this much enough. 这够多了。 no need to for loop.. 不需要循环..

        if (MP3_catalogue.artist.contains(search)){
                int SV = MP3_catalogue.artist.indexOf(search);
                System.out.println(MP3_catalogue.title.get(SV));
                System.out.println(MP3_catalogue.artist.get(SV));
                System.out.println(MP3_catalogue.duration.get(SV));
        } else {
               System.out.println("not found");
        }

This looks wrong 这看起来不错

int SV = search.indexOf(search);

You want to get the object from MP3_catalogue in the loop 您想在循环中从MP3_catalogue获取对象

for (int i = 0; i< MP3_catalogue.artist.size(); i++){
       Artist artist = MP3_catalogue.artist.get (i);
            if (artist.contains(search)){
                System.out.println(artist);
}

As I do not know your data structure, I can not say whether the above approach would also be OK for title and duration. 由于我不知道您的数据结构,我不能说上述方法对于标题和持续时间是否也可以。

I would prefer to write this way , encapsulate entire cataloge in to single bean,and access/use effectively . 我更喜欢这样写,将整个目录封装到单个bean中,并有效地访问/使用。

class MP3Catalogue {
    private String title;
    private String artist;
    private String duration;

    public String getTitle() {
        return title;
    }

    public String getArtist() {
        return artist;
    }

    public String getDuration() {
        return duration;
    }
}



public class SearchSongs {
    public static ArrayList<MP3Catalogue> catelogs =  new ArrayList<MP3Catalogue>();
    public static void main(String[] args) {
        Scanner searchBar = new Scanner(System.in);
        System.out.println("Enter song title");
        String search = searchBar.nextLine().toUpperCase();

        for (MP3Catalogue cat : catelogs) {
            if (cat.getArtist().equalsIgnoreCase(search)) {
                System.out.println(" Title = " + cat.getTitle() +" Duration = " + cat.getDuration());
            }
        }
    }
}

what's the usage of for loop in your code? 你的代码中for循环的用法是什么?

maybe you can change your code like this: 也许你可以像这样改变你的代码:

        for (int i = 0; i< MP3_catalogue.artist.size(); i++){
            if (MP3_catalogue.artist.get(i).equals(search)){
                int SV = i;
                System.out.println(MP3_catalogue.title.get(SV));
                System.out.println(MP3_catalogue.artist.get(SV));
                System.out.println(MP3_catalogue.duration.get(SV));
        }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM