用JAVA中给定的首字母将该行添加到数组中
有1500多个文本文件,每个文件可能有10行以上。但是假设有两个文件有5行
假设文件1包含:
gwvY ko qwxu hovY iksY qwxu ]
gwvY ko dwiq jwxY nIswxu ]
hukmI hovin jIA hukim imlY vifAweI ]
gwvY ko gux vifAweIAw cwr ]
gwvY ko jIA lY Piir dyh ]
文件2包含:
shs isAwxpw lK hoih q iek n clY nwil ]
ikv sicAwrw hoeIAY ikv kUVY qutY pwil ]
gwvY ko ividAw ivKmu vIcwru ]
gwvY ko swij kry qnu Kyh ]
hukmI auqmu nIcu hukim iliK duK suK pweIAih ]
如果有人搜索“gk”,那么搜索应该从File1到File2开始,并且应该从两个文本文件中调出任何一行,其中包含“g”作为第一个单词(在行中)的首字母,以及“k”作为第二个单词(在行中)的首字母
例如,在这种情况下,数组应返回:
gwvY ko qwxu hovY iksY qwxu ]
gwvY ko dwiq jwxY nIswxu ]
gwvY ko gux vifAweIAw cwr ]
gwvY ko jIA lY Piir dyh ]
gwvY ko ividAw ivKmu vIcwru ]
gwvY ko swij kry qnu Kyh ]
因为“gk”是搜索词,返回的行分别以“g”和“k”的第一个和第二个字母开头。 我不确定解决这个问题的最佳方法和最快方法是什么。这里有人能帮我吗?我将非常感激。多谢各位
目前,我正在使用以下方法
BufferedReader reader = null;
String mLine;
for (int i = 1; i <=1500; i++){ //1500 Files, for-loop runs 1500 times.
try {
reader = new BufferedReader(new InputStreamReader(open("File"+i)));
mLine = reader.readLine(); // Files are read one-by-one and then the lines are ready one-by-one
while (mLine != null) {
String[] array_line = mLine.split("\\s+"); //words in the line are separated by the space are collected in an array.
// and search_word_arr is when the user enters "g k" the search_word_arr[0] = 'g' and search_word_arr[1] = 'k' and then the initial of the words in the line are checked.
if((array_line[0].startsWith(""+search_word_arr[0])) && (array_line[1].startsWith(""+search_word_arr[1]))){
arr.add(mLine);
}
mLine = reader.readLine();
}
} catch (IOException e) {
}
# 1 楼答案
一如既往:不要在过早优化上浪费时间。如果您当前的实现足够快:就使用它吧
以下是一些建议,如果您的代码速度不够快,我会尝试使用这些建议:
split('\\s+')
,而是使用indexOf(' ')
查找第一个空格字符。然后向前一步,直到找到第一个非空格字符。无需进一步处理该生产线。如果需要处理以空格和其他字符(如制表符)开头的行,则需要进行一些思考才能获得正确的结果李>char[]
缓冲区获得一些好处,这相当不方便,因为您现在必须自己扫描新行。(如果实施不力,可能会破坏已获得的优势。)李>除了最后一点,这很好,所有这些优化都不会使您的软件更易于维护。因此,如果您当前的解决方案实际上并不太慢,那么不要轻易地合并它们