2010-12-02 46 views
3

我只是在學習該語言,並想知道在以下情況下Java程序員會做什麼更多的經驗?創建一個Java程序來搜索一個特定的文件的文件

我想創建一個java程序,將搜索指定文件的所有實例的特定單詞。

你會怎麼做呢,Java API是否提供了一個提供文件掃描功能的類,或者我將不得不編寫自己的類來做到這一點?

感謝您的任何輸入,
Dom。

+0

什麼特定的詞? – 2010-12-02 18:30:56

+1

搜索不區分大小寫嗎?例如「貓」是否匹配「貓」? – 2010-12-02 18:31:22

回答

6

java API確實提供了java.util.Scanner類,它允許您掃描輸入文件。

但是,根據你打算如何使用這個,這可能不是最好的主意。文件非常大嗎?你只搜索一個文件還是你想保留一個數據庫的許多文件,並在其中搜索文件?在這種情況下,您可能需要使用更加充實的引擎,如lucene

3

除非該文件是非常大的,我會

String text = IOUtils.toString(new FileReader(filename)); 
boolean foundWord = text.matches("\\b" + word+ "\\b"); 

要查找所有單詞之間的文本,你可以使用分裂(),並使用字符串的長度來確定位置。

3

正如其他人指出的那樣,您可以使用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意味着一個字boundry
  • java是字符串搜索
  • \b一個字boundry一次。

如果搜索詞來自於用戶,或者如果它用於其它一些原因,可能包含特殊字符,我建議你使用\Q\E串繞,因爲它引用的所有字符之間,(如果你真的很挑剔,請確保輸入本身不包含\E)。

相關問題