【问题标题】:How do I find a specific string from an array list using (.contains)如何使用 (.contains) 从数组列表中查找特定字符串
【发布时间】:2023-04-04 21:40:01
【问题描述】:

我需要从数组列表中找到一个特定的字符串(字母)。我使用 .add 函数将我之前创建的列表添加到我的数组中。我如何(使用我的数组列表)找到用户输入的带有特定字母的特定单词。

import java.util.*;

public class Library {  
    
    public static void main (String[] args)
    {
        
        
        ArrayList<Book> bookList = new ArrayList<Book>();
        ArrayList<libraryMembers> memberList = new ArrayList<libraryMembers>();
        
        
    String userChoice;
    
    {   
        
        //Using previous class and assigning values to ID, Phone, Name, and Surname
        libraryMembers lm1 = new libraryMembers (1111, 3234231, "Glock", "John");
        libraryMembers lm2 = new libraryMembers (1112, 3234231, "Ackerman", "Mikasa");
        libraryMembers lm3 = new libraryMembers (1113, 341231, "Crab", "Armin");
        libraryMembers lm4 = new libraryMembers (1114, 3423431, "Bacony", "Conny");
        libraryMembers lm5 = new libraryMembers (1115, 3423431, "Jaeger", "Erwin");
        libraryMembers lm6 = new libraryMembers (1116, 3423431, "Jaeger", "Zeke");
        
        //Printing member information
        lm1.informationPrint();
        lm2.informationPrint();
        lm3.informationPrint();
        lm4.informationPrint();
        lm5.informationPrint();
        lm6.informationPrint();
            
        
        memberList.add(lm1);
        memberList.add(lm2);
        memberList.add(lm3);
        memberList.add(lm4);
        memberList.add(lm5);
        memberList.add(lm6);

从我已将信息放入的这个数组中,我希望用户输入一个字母,并让程序输出包含该特定字母的所有姓名和姓氏。

【问题讨论】:

  • 尝试添加输入示例和预期输出。此外,您还需要考虑是否希望它区分大小写。该解决方案将涉及循环memberList 并对列表中的每个成员的姓名或姓氏或两者执行String.contains。如果您需要有关该部分的帮助,请说明您已尝试过什么。

标签: java arrays contains


【解决方案1】:

List.contains() 仅告诉您列表是否包含基于equals 的某个对象。 contains 会期望 List type 的参数(在您的情况下为 LibraryMembers)。

但是您可以按如下方式获得所需的结果。这假定您有名字和姓氏的 getter 和 setter。它通过流式传输成员列表并在每个名称中搜索所需字母来工作。搜索是区分大小写的,但可以在名称上使用 toLowerCase 进行更改,并且始终在所需字符或子字符串上使用小写来查找。

boolean result = memberList.stream()
              .anyMatch(lm->lm.getLastName().contains("G") || 
                            lm.getFirstName().contains("G"));

然后对结果进行测试。

如果你想恢复所有匹配的条目,你可以这样做。

List<LibraryMembers> results = memberList.stream()
     .filter(lm->lm.getLastName().contains("G") || 
             lm.getFirstName().contains("G"))
      .collect(Collectors.toList());

if (results.size() > 0) {
   results.forEach(System.out::println); // requires toString override
                                         // in LibraryMember class.
} else {
   System.out.println("Request not found");
}


【讨论】:

    【解决方案2】:

    我希望程序看起来像这样:

    System.out.println("The program will allow the user to search for a string by typing a 
    letter")
    
    userAnswer = scan.next();
    
    boolean userAnswer = memberList.contains("G"); 
        
            if (userAnswer)
                System.out.println("The list contains Glock,");
            else
                System.out.println("The list does not contain any words with that letter");
            
    

    所以信息来自:

    import java.util.*;
    
    public class Library {
    
        
    
    
    
    public static void main (String[] args)
    {
        
        
        ArrayList<Book> bookList = new ArrayList<Book>();
        ArrayList<libraryMembers> memberList = new ArrayList<libraryMembers>();
        
        
    String userChoice;
    
    {
      
        
        
        
        
        //Using previous class and assigning values to ID, Phone, Name, and Surname
        libraryMembers lm1 = new libraryMembers (1111, 3234231, "Glock", "John");
        libraryMembers lm2 = new libraryMembers (1112, 3234231, "Ackerman", "Mikasa");
        libraryMembers lm3 = new libraryMembers (1113, 341231, "Crab", "Armin");
        libraryMembers lm4 = new libraryMembers (1114, 3423431, "Bacony", "Conny");
        libraryMembers lm5 = new libraryMembers (1115, 3423431, "Jaeger", "Erwin");
        libraryMembers lm6 = new libraryMembers (1116, 3423431, "Jaeger", "Zeke");
        
        //Printing member information
        lm1.informationPrint();
        lm2.informationPrint();
        lm3.informationPrint();
        lm4.informationPrint();
        lm5.informationPrint();
        lm6.informationPrint();
    

    //上面一行只是打印出信息

        memberList.add(lm1);
        memberList.add(lm2);
        memberList.add(lm3);
        memberList.add(lm4);
        memberList.add(lm5);
        memberList.add(lm6);
        
    // Using this line I have added my lists to the array
    

    它不需要区分大小写。

    我尝试过这样的事情:

    public static void main (String[] args) {

        ArrayList<String> memberList = new ArrayList<String>();
    
    memberList.add("Glock, John, Ackerman, Mikasa, Crab, Armin, Bacony, Conny, 
    Jaeger, Erwin, Jaeger, Zeke");
    
    boolean userAnswer = memberList.contains("G");
        
        if (userAnswer)
            System.out.println("The list contains Glock");
        else
            System.out.println("The list does not containg string with letter g");
            
    

    但我能找到的唯一方法是输入完整的字符串而不是字母。

    【讨论】:

    • 如何回答?看起来你重复了你的问题。
    • 第一次使用 Stack Overflow,现在是凌晨 4 点,我已经筋疲力尽了……我已经被困在这个问题上很长一段时间了。如果不清楚,请道歉。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多