我有一个大文本文件,我需要逐行搜索文件中的单词或短语,然后输出包含在其中找到的文本的行。
例如,示例文本为
And the earth was without form,
Where [art] thou?
如果用户搜索thou
字,则唯一要显示的行是
Where [art] thou?
如果用户搜索the earth
,则应显示第一行。
我尝试使用contains
功能,但在仅搜索without
时也会显示thou
。
这是我的示例代码:
String[] verseList = TextIO.readFile("pentateuch.txt");
Scanner kbd = new Scanner(System.in);
int counter = 0;
for (int i = 0; i < verseList.length; i++) {
String[] data = verseList[i].split("\t");
String[] info3 = data[3].split(" ");
System.out.print("Search for: ");
String txtSearch = kbd.nextLine();
LinkedList<String> searchedList = new LinkedList<String>();
for (String bible : verseList){
if (bible.contains(txtSearch)){
searchedList.add(bible);
counter++;
}
}
if (searchedList.size() > 0){
for (String s : searchedList){
String[] searchedData = s.split("\t");
System.out.printf("%s - %s - %s - %s \n",searchedData[0], searchedData[1], searchedData[2], searchedData[3]);
}
}
System.out.print("Total: " + counter);
所以我在考虑使用regex
,但我不知道如何使用<<
。
有人可以帮忙吗?谢谢。
答案 0 :(得分:1)
要匹配包含单词的字符串,请使用以下代码:
String txtSearch; // eg "thou"
if (str.matches(".*?\\b" + txtSearch + "\\b.*"))
// it matches
此代码构建一个正则表达式,仅当txtSearch
的两端都落后,并且使用\b
时字符串中单词的开头/结尾才会匹配,这意味着&#34;字边界&#34 ;
答案 1 :(得分:1)
由于有时变量在边界位置具有非单词字符,因此您不能依赖\b
字边界。
在这种情况下,使用环顾(?<!\w)
和(?!\w)
更安全,例如在Java中,类似于:
"(?<!\\w)" + searchedData[n] + "(?!\\w)"