java - 如何在 Java 中检查 null 分隔值?

标签 java csv arraylist

我有一个来自输入 csv 文件的记录数组列表。有些记录具有完整列,但有些记录为空。例如:

abc, 1441652452, 8.64015, 52.75034
abc, 1442279677,,
abc, 1442280570, 10.44255,148.78166

无论如何,连续的完整记录可能不止一行。如果您查看记录,在位置 [2] 和 [3] 处,纬度和经度会相应存储。我想要做的是计算(在上面的示例中)第三条记录和第一条记录之间的距离。 (我已经有了计算纬度之间距离的公式。 目前,我的代码由以下部分组成:

for (int i = 0; i < oneUserRecord.size(); i++) {
            String currentRecord = oneUserRecord.get(i);
            String[] current = currentRecord.split(",");
            double currentLat = Double.parseDouble(current[3]);
            double currentLng = Double.parseDouble(current[4]);
}

我最初计划做的是检索下一条记录,并提取下一条记录的经纬度,然后找出下一条记录的经纬度与当前记录的经纬度之间的距离。但是,由于记录不完整,我将无法提取位置 [3] 和 [4],因为它们不存在于这些字符串中。 所以,我的问题简单地说就是,如何检查下一条记录的位置 [3] 和 [4] 是否为空,如果它空,我如何将下一条记录分配为下面的记录行有纬度和经度值吗?

我有一个逻辑,(从上面的代码继续),

String nextRecord = "";

            if ((oneUserRecord.get(i++).split(",")[3]).isEmpty()
                    || (oneUserRecord.get(i++).split(",")[4]).isEmpty()) {
                nextRecord = oneUserRecord.get(i++);
            }
            else {
                nextRecord = oneUserRecord.get(i + 1);
            }

            String[] next = nextRecord.split(",");
            double nextLat = Double.parseDouble(next[3]);
            double nextLng = Double.parseDouble(next[4]);

但它不起作用,仍然出现越界错误。这是我可以改进的方法,还是另一种方法可以让我得到我想要的结果?

最佳答案

您应该避免多次拆分任何记录。此外,由于输入的原因,这无法按预期工作。

您的示例表明某些值可能完全丢失。这与空值不同。

例如,“,,,”表示空值,但“”表示单个空字符串。如果您有如此不完整的条目,没有人可以说哪些是空条目。例如,“a,b,d”应该翻译为[“a”,“b”,“”,“d”]还是[“a”,“b”,“d”,“”]?这只能通过您必须实现的某些逻辑/解析器来完成。

对于您的情况,以下内容应该足够了:

String nextRecord = oneUserRecord.get(i++).split(",", -1);
while (nextRecord.length < 4) {
  nextRecord = oneUserRecord.get(i++).split(",", -1);
}

@Edit:如果问题中更改了有效输入,则不会发生上述问题。但是,您仍然应该使用 String#split(String, int) ,如图所示。否则在某些情况下你会得到意想不到的结果,例如

"a,b,c,".split()

只会返回一个包含 3 个元素的数组。

关于java - 如何在 Java 中检查 null 分隔值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33095238/

相关文章:

java - 没有指定泛型类型,方法不返回元素列表,而只是一个列表

java - Selenium 中的输入字段被标题隐藏

javascript - 如何在 Node.js 中解析 "Cannot read property of undefined"

python - 组织两列数据

java - ArrayList trimtosize 不工作 android

java - Maven:经常从远程存储库下载元数据 xml 文件

java - 无法通过长 ID 删除实体

postgresql - 从 CSV 加载 PostgreSQL 表,数据在括号之间带有逗号

java - 为什么 ArrayList 副本的行为与整数副本不同?

java - 插入到 Impala 表与写入 HDFS