【问题标题】:Processing - parsing a text file, omitting certain lines with loadStrings()处理 - 解析文本文件,用 loadStrings() 省略某些行
【发布时间】:2017-02-08 14:06:42
【问题描述】:

我有一个文件路径的文本文件,并且需要这些文件路径的数组。但是,某些文件路径被“注释”掉了,行首带有感叹号,我不想将这些行包含在数组中。

目前我使用loadStrings()将整个文本文件放在一个数组中,然后遍历整个数组并只放置不以“!”开头的元素在StringList 中,在将StringList 转换回数组之前,从而获得一个仅包含“未注释”文件路径的数组,没有多余的空间。

这似乎非常低效和麻烦,那么有谁知道实现这一目标的更好方法吗?有没有办法忽略以“!”开头的行在原始读取阶段,或者失败,一种从第一个数组中轻松删除这些元素并相应调整该数组大小的方法?

当前代码:

String file = "File_Paths.txt";
String[] filePaths_raw = loadStrings(file);
StringList filePaths = new StringList();

for (int i = 0; i < filePaths_raw.length; i++) {
  if (filePaths_raw[i].charAt(0) != 33) {
    filePaths.append(filePaths_raw[i]);
  }
}

filePathsArray = new String[filePaths.size()];

for (int i = 0; i < filePathsArray.length; i++) {
  filePathsArray[i] = filePaths.get(i);
}

【问题讨论】:

标签: arrays arraylist processing


【解决方案1】:

你的解决方案很好。

读取文件需要 O(N) 时间,其中 N 是文件中的行数。

遍历数组需要另一个 O(N) 时间,您需要执行两次。所以你的总时间是 3*O(N),也就是 O(N)。在单个循环中执行此操作仍然需要 O(N) 时间。所以从总体上看,这并不是非常低效。

您可以使用array() 函数简化代码,该函数从StringList 创建一个数组。这不会加速你的代码(这可能不是你应该担心的事情),但它会消除最后一个for 循环。更多信息请访问the reference

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-26
    • 1970-01-01
    • 1970-01-01
    • 2018-02-03
    • 1970-01-01
    • 2010-10-04
    相关资源
    最近更新 更多