处理 - 解析文本文件,使用 loadStrings() 省略某些行

Processing - parsing a text file, omitting certain lines with loadStrings()

我有一个文件路径的文本文件,需要这些文件路径的数组。但是,有些文件路径是"commented"出来的,行首有感叹号,我不想把这些行包含在数组中。

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

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

当前代码:

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);
}

你的解决方案很好。

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

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

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

中提供了更多信息