我只是在學習該語言,並想知道在以下情況下Java程序員會做什麼更多的經驗?創建一個Java程序來搜索一個特定的文件的文件
我想創建一個java程序,將搜索指定文件的所有實例的特定單詞。
你會怎麼做呢,Java API是否提供了一個提供文件掃描功能的類,或者我將不得不編寫自己的類來做到這一點?
感謝您的任何輸入,
Dom。
我只是在學習該語言,並想知道在以下情況下Java程序員會做什麼更多的經驗?創建一個Java程序來搜索一個特定的文件的文件
我想創建一個java程序,將搜索指定文件的所有實例的特定單詞。
你會怎麼做呢,Java API是否提供了一個提供文件掃描功能的類,或者我將不得不編寫自己的類來做到這一點?
感謝您的任何輸入,
Dom。
java API確實提供了java.util.Scanner
類,它允許您掃描輸入文件。
但是,根據你打算如何使用這個,這可能不是最好的主意。文件非常大嗎?你只搜索一個文件還是你想保留一個數據庫的許多文件,並在其中搜索文件?在這種情況下,您可能需要使用更加充實的引擎,如lucene。
除非該文件是非常大的,我會
String text = IOUtils.toString(new FileReader(filename));
boolean foundWord = text.matches("\\b" + word+ "\\b");
要查找所有單詞之間的文本,你可以使用分裂(),並使用字符串的長度來確定位置。
正如其他人指出的那樣,您可以使用Scanner
類。
我把你的問題在文件中,data.txt
,並運行下面的程序:
import java.io.*;
import java.util.Scanner;
import java.util.regex.MatchResult;
public class Test {
public static void main(String[] args) throws FileNotFoundException {
Scanner s = new Scanner(new File("data.txt"));
while (null != s.findWithinHorizon("(?i)\\bjava\\b", 0)) {
MatchResult mr = s.match();
System.out.printf("Word found: %s at index %d to %d.%n", mr.group(),
mr.start(), mr.end());
}
s.close();
}
}
輸出是:
Word found: Java at index 74 to 78.
Word found: java at index 153 to 157.
Word found: Java at index 279 to 283.
模式搜索,(?i)\bjava\b
,意味着:
(?i)
打開不區分大小寫的開關\b
意味着一個字boundryjava
是字符串搜索\b
一個字boundry一次。如果搜索詞來自於用戶,或者如果它用於其它一些原因,可能包含特殊字符,我建議你使用\Q
和\E
串繞,因爲它引用的所有字符之間,(如果你真的很挑剔,請確保輸入本身不包含\E
)。
什麼特定的詞? – 2010-12-02 18:30:56
搜索不區分大小寫嗎?例如「貓」是否匹配「貓」? – 2010-12-02 18:31:22