【问题标题】:How to check if a substring is present in a string which is part of an ArrayList如何检查子字符串是否存在于作为 ArrayList 一部分的字符串中
【发布时间】:2016-09-01 11:26:38
【问题描述】:

所以我将 Student(它们是对象)添加到我的 arrayList 中,并且在代码的开头我会让用户添加尽可能多的学生 + 学生编号,直到他们输入空白。一旦他们输入空白,我的程序就会打印出所有学生和他们的学号。一旦它打印出学生和他们的号码,用户就会被要求提供一个搜索词。然后程序将打印出所有说出搜索词的学生。除了将搜索词与我的 ArrayList 中的字符串进行比较之外,我的代码中的所有内容都有效

这是我目前想出的:

import java.util.ArrayList;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
    Scanner reader = new Scanner(System.in);    
    ArrayList<Student> students = new ArrayList<Student>();
        System.out.print("name: ");
        String name = reader.nextLine();
        while (!name.equals("")) {

            System.out.print("studentnumber: ");
            String studentNumber = reader.nextLine();
            students.add(new Student(name, studentNumber)); 
            System.out.print("name: ");
            name = reader.nextLine();
        }
        for (Student prs : students ) {
            System.out.println(prs);
        }

        System.out.println("Give search term: ");
        String searchTerm = reader.nextLine();
        System.out.println("Result: ");

        for (Student prs : students) {
            if (prs.contains(searchTerm)) {
                System.out.println(prs);
            }
        }
    }
}

所以我的问题是如何修复代码行

for (Student prs : students) {
    if (prs.contains(searchTerm)) {
        System.out.println(prs);
    }
}

让它工作。

感谢您的帮助。

【问题讨论】:

  • 这段代码应该打印什么,它打印的是什么?
  • Student 类中公开一个方法以返回您必须搜索的字段。并在上面使用contains()

标签: java arrays string substring


【解决方案1】:

像这样修改你的学生类,无需更改其他代码,只需查看自定义包含方法

package com.tried;

public class Student {

    String name;

    String studentNumber;

    public Student(String name2, String studentNumber) {

        this.name=name2;
        this.studentNumber=studentNumber;
        // TODO Auto-generated constructor stub
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getStudentNumber() {
        return studentNumber;
    }

    public void setStudentNumber(String studentNumber) {
        this.studentNumber = studentNumber;
    }

    public boolean contains(String term){
        System.out.println(this.studentNumber+"and"+this.name);
        if(this.studentNumber.contains(term) || this.name.contains(term)){

            return true;
        }

        return false;
    }

    @Override
    public String toString() {
        return "Student [name=" + name + ", studentNumber=" + studentNumber + "]";
    }




}

【讨论】:

  • 这真是漂亮的面向对象的解决方案。谢谢。
【解决方案2】:

假设您正确覆盖了 Student 类的 toString 方法,请更改

for (Student prs : students) {
    if (prs.contains(searchTerm)) {
        System.out.println(prs);
}

for (Student prs : students) {
    if (prs.toString().contains(searchTerm)) {
        System.out.println(prs);
}

【讨论】:

  • 是的,这行得通。谢谢!您能否详细说明为什么我必须将 prs 的值转换为字符串?我的代码到底发生了什么? Student 中的值不是字符串吗?
  • 为了回答这个问题,我需要看看你的 Student 类的 contains 方法。
猜你喜欢
  • 2019-03-03
  • 2022-01-15
  • 2023-04-07
  • 1970-01-01
  • 2012-09-28
  • 2011-07-30
  • 1970-01-01
  • 2011-09-19
  • 2021-05-05
相关资源
最近更新 更多