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

时间:2017-02-08 14:06:42

标签: arrays arraylist processing

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

目前,我使用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);
}

1 个答案:

答案 0 :(得分:1)

你的解决方案很好。

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

迭代数组需要另外一次O(N)时间,你会做两次。所以你的总时间是3 * O(N),即O(N)。在单个循环中执行此操作仍然是O(N)时间。因此,在宏观的计划中,这并不是非常低效。

您可以使用declare @cadena varchar(max) = '' select @cadena = @cadena + 'exec spAPI ' + ltrim(id) + ';' from sysobjects; exec(@cadena); 函数简化代码,该函数会从array()创建一个数组。这不会加速你的代码(这可能不是你应该担心的事情),但它将消除最后StringList循环。有关详细信息,请参阅the reference

相关问题