【问题标题】:validate ArrayList contents against specific set of data根据特定数据集验证 ArrayList 内容
【发布时间】:2019-12-16 11:41:13
【问题描述】:

我想检查并验证 ArrayList 中的所有内容是否与 String 变量的值相似。如果任何值不相似,则要打印的索引号带有错误消息,例如(索引 2 处的值与预期名称变量的值不匹配)。 在我运行下面的代码后,它将打印所有三个索引以及错误消息,它不会只打印索引号 1。 请注意,这里我从 CSV 文件中获取数据,将其放入 arraylist,然后根据字符串变量中的预期数据对其进行验证。

import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVParser;
import org.apache.commons.csv.CSVRecord;
import java.io.IOException;
import java.io.Reader;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;

public class ValidateVideoDuration {
private static final String CSV_FILE_PATH = "C:\\Users\\videologs.csv";
public static void main(String[] args) throws IOException {

    String expectedVideo1Duration = "00:00:30";
    String expectedVideo2Duration = "00:00:10";
    String expectedVideo3Duration = "00:00:16";

    String actualVideo1Duration = "";
    String actualVideo2Duration = "";
    String actualVideo3Duration = "";

    ArrayList<String> actualVideo1DurationList = new ArrayList<String>();
    ArrayList<String> actualVideo2DurationList = new ArrayList<String>();
    ArrayList<String> actualVideo3DurationList = new ArrayList<String>();

    try (Reader reader = Files.newBufferedReader(Paths.get(CSV_FILE_PATH));
            CSVParser csvParser = new CSVParser(reader,
                    CSVFormat.DEFAULT.withFirstRecordAsHeader().withIgnoreHeaderCase().withTrim());) {
        for (CSVRecord csvRecord : csvParser) {
            // Accessing values by Header names
            actualVideo1Duration = csvRecord.get("Video 1 Duration");
            actualVideo1DurationList.add(actualVideo1Duration);
            actualVideo2Duration = csvRecord.get("Video 2 Duration");
            actualVideo2DurationList.add(actualVideo2Duration);
            actualVideo3Duration = csvRecord.get("Video 3 Duration");
            actualVideo3DurationList.add(actualVideo3Duration);

        }
    }

    for (int i = 0; i < actualVideo2DurationList.size(); i++) {
        if (actualVideo2DurationList.get(i) != expectedVideo2Duration) {
            System.out.println("Duration of Video 1 at index number " + Integer.toString(i)
                    + " didn't match the expected duration");
        }
    }

我的 CSV 文件中的数据如下所示:

video 1 duration, video 2 duration, video 3 duration
00:00:30, 00:00:10, 00:00:16
00:00:30, 00:00:15, 00:00:15
00:00:25, 00:00:10, 00:00:16

【问题讨论】:

  • 那么你的问题是什么?
  • 尝试将 ArrayLists 存储在 ArrayList 中,这样 3 个持续时间就已经组合在一起了。
  • 感谢 Christopher 检查我的代码。你能帮我怎么做吗?请注意,我需要 ArrayList 数据来自 CSV 文件,这是解决此问题的必要条件。
  • 感谢 RisingSun 审核此代码。问题是代码末尾的 for 循环返回所有索引,但是它应该只返回索引号 2,其值为 00:00:25 与 String 变量的值不匹配是 00:00:30

标签: java string validation for-loop arraylist


【解决方案1】:

不要使用==!= 进行字符串比较。 == 检查两个字符串的引用相等性,而不是值的相等性。请改用.equals() 方法。

将 if 条件更改为 if (!actualVideo2DurationList.get(i).equals(expectedVideo2Duration))

【讨论】:

  • 非常感谢Ame,它解决了这个问题。上帝保佑你。
猜你喜欢
  • 1970-01-01
  • 2017-03-07
  • 1970-01-01
  • 1970-01-01
  • 2013-03-18
  • 1970-01-01
  • 2021-06-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多