有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何检查列表中的数据是否包含0或空值并删除该数据

下面是我迄今为止创建的代码。 也就是说,下面的程序正在读取该文件,如果给定文件中的一个字段为空,那么它将为整数值打印0,为字符串值打印null

// Override all the methods of the DataManager Interface
public class StudentDataManager implements DataManager {
    List<Student> list = new ArrayList<Student>();

    @SuppressWarnings("null")
    @Override
    public List<Student> populateData(String fileName) {

        Scanner s = null;
        String nameAndRollNumber = "";
        String numbers[] = null;
        Integer roll1 = 0;
        String roll = null;
        String name = null;
        String age = null;
        String zip = null;
        String street = null;
        String city = null;
        Integer age1 = 0;
        String cpmletedata = null;
        try {
            s = new Scanner(new File("F:\\...\\StudentDetails.txt"));

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

        while (s.hasNext()) {
            nameAndRollNumber = s.nextLine();
            String[] nameAndRollNumbers = nameAndRollNumber.split(",");
            try {
                roll = nameAndRollNumbers[0];
                roll1 = Integer.valueOf(roll);
                cpmletedata = " " + roll;
                name = nameAndRollNumbers[1];

                if (nameAndRollNumbers[1].equals("")) {
                    cpmletedata = cpmletedata + " null ";
                } else {
                    cpmletedata = cpmletedata + " " + name;
                }

                age = nameAndRollNumbers[2];

                if (nameAndRollNumbers[2].equals("")) {
                    cpmletedata = cpmletedata + " 0 ";
                } else {
                    age1 = Integer.valueOf(age);
                    cpmletedata = cpmletedata + " " + age1;
                }

                street = nameAndRollNumbers[3];
                if (nameAndRollNumbers[3].equals("")) {
                    cpmletedata = cpmletedata + " null ";
                } else {
                    cpmletedata = cpmletedata + " " + street;
                }

                city = nameAndRollNumbers[4];
                if (nameAndRollNumbers[4].equals("")) {
                    // System.out.print("null");
                    cpmletedata = cpmletedata + " null ";
                } else {
                    // System.out.print(city + " ");
                    cpmletedata = cpmletedata + " " + city;
                }

                zip = nameAndRollNumbers[5];

                if (nameAndRollNumbers[5].equals(" ")) {
                    cpmletedata = cpmletedata + " null ";
                } else {
                    cpmletedata = cpmletedata + " " + zip;
                }

                Address a1 = new Address(street, city, zip);
                cpmletedata = cpmletedata + " ";
                System.out.println(cpmletedata);
                list.add(new Student(roll1, name, age1, a1));
            }

            catch (Exception e) {
                e.printStackTrace();
            }
        }

        s.close();
        return list;
    }
}

现在我有这么多的代码,它给出了以下输出:

 1 Arjun 12 GhandiNagar Pune 411020 
 2 Deep 8 M.G.Road Mumbai 411032 
 3 Deep 3 F.C.Road Pune 411032 
 4 Neha 10 Camp Pune 411023 
 5 Seema 0  null  null  null  
 6 Bani 6 Camp Mumbai 411045 
 7 Deepali 3 M.G.Road Mumbai 411032 
 8 Neha 0  null  Mumbai null  
 9 Meena 9 Nariman Point Mumbai 411045 
 10 Chaitali 3 M.G.Road Mumbai 411032 
 11 Bani 6 Camp Mumbai 411045 
 12 Deepali 3 M.G.Road Mumbai 411032 
 13 Neha 10 F.C. Road Pune 411023 
 14 Deep 3 F.C.Road Pune 411032 
 15 Beena 6 Camp Mumbai 411045 

另一个功能是验证数据。也就是说,如果记录包含0null,我们必须使其无效,也就是说,我们必须删除该特定行并将异常作为InsufficientDataException抛出。我创造了这个例外,但我不明白。如何再次读取该列表并检查行是否包含0null并验证它


共 (3) 个答案

  1. # 1 楼答案

    如果修改当前学生列表,它将抛出一个异常, 因此,创建另一个学生列表,条件是只选择所需的 参赛将是一个很好的方法,如下所示:


    public void validateData(List<Student> studentList)
            throws InsufficientDataException {
        List<Student> studentList2 = new ArrayList<Student>();
        // studentList2.addAll(studentList);
    
        int i = 0;
        for (Student s : studentList) {
    
            i++;
            if ((s.getRollno() == 0) || (s.getStudentName() == "null")
                    || (s.getAge() == 0)
                    || (s.getAddress().getStreetName() == "null")
                    || (s.getAddress().getCity() == "null")
                    || (s.getAddress().getZipCode() == "null")) {
            } else {
                studentList2.add(s);
            }
        }
    
        for (Student s : studentList2) {
            System.out.println(s.getRollno() + "  " + s.getStudentName() + "  "
                    + s.getAge() + "  " + s.getAddress().getStreetName() + "  "
                    + s.getAddress().getCity() + "  "
                    + s.getAddress().getZipCode());
        }
    
    }
    

    下面是您想要的输出(过滤):


    1  Arjun  12  GhandiNagar  Pune  411020
    2  Deep  8  M.G.Road  Mumbai  411032
    3  Deep  3  F.C.Road  Pune  411032
    4  Neha  10  Camp  Pune  411023
    6  Bani  6  Camp  Mumbai  411045
    7  Deepali  3  M.G.Road  Mumbai  411032
    9  Meena  9  Nariman Point  Mumbai  411045
    10  Chaitali  3  M.G.Road  Mumbai  411032
    11  Bani  6  Camp  Mumbai  411045
    12  Deepali  3  M.G.Road  Mumbai  411032
    13  Neha  10  F.C. Road  Pune  411023
    14  Deep  3  F.C.Road  Pune  411032
    15  Beena  6  Camp  Mumbai  411045
    
  2. # 2 楼答案

    您可以创建一个validate():boolean方法,该方法读取数组的每个条目,并测试是否存在0或null值。如果检测到这种情况,则返回false,否则在方法末尾返回true

  3. # 3 楼答案

    我这边的一个可能的解决方案和建议是使用来自org.apache.commonsCollectionUtils

    List<Student> lAllStudent = lStudentDataManager.populateData("testfile.txt");
    int lOldSize = lAllStudent.size();
    CollectionUtils.filter(lAllStudent, new ListSelector<Student>() {
    
      @Override
      public boolean select(int pIndex, Student pInput) {
        if (pInput.getAge()==0 || pInput.getZip() == null || pInput.getStreet() == null || pInput.getCity() == null){
          return false;  
        }
        return true;
      }
    });
    if (lOldSize != lAllStudent.size()){
      throw new InsufficientDataException();
    }
    

    如果select返回false,元素将从列表中删除。 调用filter后,可以将列表的旧大小与新大小进行比较。如果当前大小和旧大小之间存在差异,则某些元素已被删除,您可以抛出exception