处理 - 解析文本文件,使用 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.
中提供了更多信息
我有一个文件路径的文本文件,需要这些文件路径的数组。但是,有些文件路径是"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.