使用正则表达式从文本文件中查找搜索模式

时间:2017-12-01 04:34:18

标签: java pattern-matching

我正在编写一个程序,其中用户输入的搜索模式是一个字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());
        }

1 个答案:

答案 0 :(得分:1)

添加"字边界"每个术语:

Pattern pattern = Pattern.compile("\\b" + wordToSearch + "\\b");