【问题标题】:How to parse an array of objects and save elements of specific attributes to a different array? [duplicate]如何解析对象数组并将特定属性的元素保存到不同的数组? [复制]
【发布时间】:2020-12-04 14:51:54
【问题描述】:

我有一个呼叫记录数组,我想将呼叫处置为“DNC”的记录存储在不同的数组中。该函数打开一个 csv 文件并将整个文件读入对象数组并设置属性。原始数组包含 680 条对象记录。我的对象设置器后面有一个 if 语句,如果 userArray[count].getDisposition == "DNC" 然后将此记录添加到我的新数组 DNC_List[dnc_count] 并增加 dnc_count++。

dnc_count 被初始化为 0,在进程结束时,它仍然为 0。我的原始数组中有 4 条记录具有“DNC”作为属性。谁能告诉我我的代码有什么问题以及为什么当处置为 DNC 时它无法识别?

public static void myCSVReader(String filename) {
    String path = "C:\\Users\\My_Username\\Downloads\\" + filename;
    file_path = path;
    BufferedReader reader = null;
    String line = "";
    String csvSplitBy = ",";
    int count = 0;
    String fullName, U_ID;
    int dnc_count = 0;

    User userArray[] = new User[1000];
    User[] DNC_List = new User[1000];
    System.out.println("Starting csv reader");

    try {
        reader = new BufferedReader(new FileReader(path));
        while ((line = reader.readLine()) != null) {
            String[] s = line.split(csvSplitBy);

            fullName = s[13] + " " + s[15];
            U_ID = s[44];
            userArray[count] = new User(s[1], s[2], s[0], fullName, U_ID);
            userArray[count].setDisposition(s[2]);
            userArray[count].setNumber(s[1]);
            userArray[count].setName(fullName);
            userArray[count].setID(U_ID);
            if(userArray[count].getDisposition() == "DNC" || userArray[count].getDisposition() == "CS"){
                DNC_List[dnc_count].setKey(String.valueOf(dnc_count));
                DNC_List[dnc_count].setDisposition("DNC");
                DNC_List[dnc_count].setName(userArray[dnc_count].getName());
                DNC_List[dnc_count].setID(userArray[dnc_count].getID());
                dnc_count++;
            }
            count++;
            User user = new User(s[1], s[2], s[0], fullName, U_ID);
            user.setDisposition(s[2]);
            user.setNumber(s[1]);
            user.setName(fullName);
            user.setID(U_ID);

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

    // Prints out the array index, name, disposition, and phone_number
    System.out.println("\n\nUser array: \n");
    for (int i = 0; i < userArray.length; i++) {
        if (userArray[i] != null) {
            System.out.println(i + ": " + userArray[i].getName() + "\t | Dispo = " + userArray[i].getDisposition()
                    + "\t | Phone = " + userArray[i].getNumber());
        }
    }
    
    System.out.println("\nDNC_COUNT = " + dnc_count);
    for (int i = 0; i < dnc_count; i++) {
        System.out.println(DNC_List[i] + "\n");
    }
}

【问题讨论】:

  • 使用equals而不是==来比较字符串:"DNC".equals( userArray[count].getDisposition())

标签: java arrays object


【解决方案1】:

字符串对象的值不能用'=='操作符比较,应该使用equals()方法。

将比较更改为使用 String 类的 equals 方法。

使用

userArray[count].getDisposition().equals("DNC") "CS"

而不是

userArray[count].getDisposition() == "DNC" 

【讨论】:

  • 太棒了,非常感谢。这解决了我的问题。
  • 欢迎您!你的支持很重要!
  • @Prabhu,这样的问题是一个唾手可得的果实,通常值得评论。而且这个问题很可能会因为重复而很快被关闭,然后被删除。
  • @AlexRudenko 如果问题因重复而被关闭,这会影响我在 stackoverflow 上的个人资料吗?
  • @AnthonyHorner,如果问题已关闭,它不会影响您的声誉点数,只是不允许新的答案。只有当一个问题被删除时,所有相关的点(正面或负面)都会被丢弃,但是,“重复”问题被删除的机会非常高。
【解决方案2】:

尝试使用equals() 方法而不是==

public class Main {
  public static void main(String[] args) {
    String a = "DNC";
    String b = new String("DNC");
    System.out.println(a == b);
    System.out.println(a.equals(b));
  }
}

输出:

false
true

【讨论】:

  • 谢谢!这解决了我的问题
  • 太棒了!请通过单击绿色的大复选框来投票并接受答案。 :) 享受!!
  • @Tushar,这样的问题是一个唾手可得的果实,通常值得评论。而且这个问题很可能会因为重复而很快被关闭,然后被删除。
猜你喜欢
  • 1970-01-01
  • 2019-08-21
  • 1970-01-01
  • 2019-08-31
  • 2016-11-12
  • 2016-07-10
  • 2015-02-06
  • 1970-01-01
  • 2018-02-17
相关资源
最近更新 更多