Java数组排序和筛选
因此,我有一个“csv”文件,其中包含以下信息:Java数组排序和筛选,java,sorting,filtering,Java,Sorting,Filtering,因此,我有一个“csv”文件,其中包含以下信息: PersonName,Likes,Dislikes,DOB,MOB John Lauzon,Games,,14,09 Jane Smith,Music,,15,02 Hugh Mungus,Jokes,,01,04 此代码按DOB(日期)对该数组进行排序,并应按txtBDays中的值对其进行过滤,该值表示MOB(出生月份),并在名为“txtDisplayArea”的文本区域中显示结果,但过滤位工作不正常 public void getBDay
PersonName,Likes,Dislikes,DOB,MOB
John Lauzon,Games,,14,09
Jane Smith,Music,,15,02
Hugh Mungus,Jokes,,01,04
此代码按DOB(日期)对该数组进行排序,并应按txtBDays中的值对其进行过滤,该值表示MOB(出生月份),并在名为“txtDisplayArea”的文本区域中显示结果,但过滤位工作不正常
public void getBDays() {
for (int i =0; i < numberOfEntries; i++) {
sortArray[i] = FriendInfo[i].getDOB() + "\t" + FriendInfo[i].getMOB() + "\t" + FriendInfo[i].getName() + "\t" + FriendInfo[i].getLikes() + "\t\t" + FriendInfo[i].getDislikes();
}
Arrays.sort(sortArray, 0, numberOfEntries);
txtDisplayArea.setText("Birthdays for the month of: " + txtBDays.getText() + "\n\n");
txtDisplayArea.append("Date \tMonth \tName \t\tLikes \t\tDislikes \n");
txtDisplayArea.append("------------------------------------------------------------------------------------- \n");
for (int i = 0; i < numberOfEntries; i++) {
//if (txtBDays.equals(FriendInfo[i].getMOB())) {
if (txtBDays.getText().equals(FriendInfo[i].getMOB())) {
txtDisplayArea.append(sortArray[i] + "\n");
}
}
}
public void getBDays(){
for(int i=0;i
默认情况下,当前月份的txtBDays中的值为03,因此3月份的值为03,但当我运行应用程序时,过滤无法正常工作。下面是结果屏幕截图的链接
非常感谢您的帮助。sortArray的类型是什么,您是否定义了一个
compareTo
方法?过滤(显然)不作为txtBDays.getText()
返回一个不等于FriendInfo[i].getMOB()
的值,因此首先要添加一个System.out.println(String.format(“[%s]=[%s]”,txtBDays.getText(),FriendInfo[i].getMOB())
到您的for循环,并检查您试图比较的值是否真的相等。@zeppelin它给出了这个。[03]=[03][03]=[03][03]=[03]我看了一下csv文件,看到了3个结果,我用其他数字尝试了一下,似乎效果不错。我只是在显示结果时遇到了问题。@TimBiegeleisen我是初学者,所以我肯定会犯错误,但据我所知,这是一个字符串数组,除了行之外,还有if(txtBDays.getText().equals(FriendInfo[I].getMOB()){没有compareTo方法。[03]==[03][03]=[03][03]=[03]
因此getMOB()基本上总是返回与您的筛选器匹配的03
,因此所有行都包含在结果中,如果您的数据与此不匹配(即MOB有其他值),您应该查看“getMOB”(),以查看它是否真的返回正确的字段。