我正在编写一个程序,其中用户输入的搜索模式是一个字12个字符或更少。该单词可以由任何字母数字组合组成。我正在从用户通过命令行参数输入的文本文件中读取数据。我能找到这个词,但也能找到不需要的嵌入词。例如,如果我正在搜索"是"我的文本文件包含"这个",它告诉我,当这不是理想的结果时,它找到了这个词。
我放置了#34; "在单词之前和之后,但如果它是一行中的第一个单词,则会消除它找到单词。此外,字母数字旁边的所有字符都是分隔符。因此,如果文本文件包含" this-dog"我的搜索模式是"这个",我希望它返回"这个"作为一个匹配。它应该把 - 作为一个空间。对于我的程序的这个方面,这是我现在的代码:
try {
Scanner input = new Scanner(System.in);
boolean again = true;
boolean notTheFirst = false;
while (again) {
System.out.printf("%n%s", "Please enter a search pattern: ", "%n");
String wordToSearch = input.next();
if (wordToSearch.equals("EINPUT")) {
System.out.printf("%s", "Bye!");
System.exit(0);
}
String data;
int lineCount = 1;
try (FileInputStream fis = new FileInputStream(this.inputPath.getPath())) {
File file1 = this.inputPath;
byte[] buffer2 = new byte[fis.available()];
fis.read(buffer2);
data = new String(buffer2);
Scanner in = new Scanner(data);
while (in.hasNextLine()) {
String line = in.nextLine();
Pattern pattern = Pattern.compile(wordToSearch);
Matcher matcher = pattern.matcher(line);
if (matcher.find()) {
System.out.println("Line number " + lineCount);
String stringToFile = f.findWords(line, wordToSearch);
System.out.println();
}
lineCount++;
}
}
}
} catch (IOException e) {
throw new Exception(e.getMessage());
}
答案 0 :(得分:1)
添加"字边界"每个术语:
Pattern pattern = Pattern.compile("\\b" + wordToSearch + "\\b");