【问题标题】:Use Regex to Find Search Pattern from Text File使用正则表达式从文本文件中查找搜索模式
【发布时间】:2017-12-01 04:34:17
【问题描述】:

我正在编写一个程序,用户在其中输入一个单词 12 个字符或更少的搜索模式。单词可以由任何字母数字组合组成。我正在从用户通过命令行参数输入的文本文件中读取数据。我能够找到这个词,但也能找到不需要的嵌入词。例如,如果我正在搜索“is”并且我的文本文件包含“This”,它会告诉我它找到了不是所需结果的单词。

我在单词之前和之后放置了“”,但是如果它是一行中的第一个单词,那么它就不会找到该单词。此外,字母数字旁边的所有字符都是分隔符。因此,如果文本文件包含“this-dog”并且我的搜索模式是“this”,我希望它返回“this”作为匹配项。它应该将 - 视为一个空格。这是我目前针对我的程序这方面的代码:

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());
        }

【问题讨论】:

    标签: java pattern-matching


    【解决方案1】:

    在每一端添加“单词边界”术语:

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

    【讨论】:

    • 您好,谢谢。如果我想做同样的事情,但使用字符串怎么办?我可以这样做吗? String fileText = "\\b" + str + "\\b";//文件中的文本 String searchWord = "\\b" + search + "\\b";//正在搜索的单词
    • @austin 这听起来像是一个单独的问题,但是......你所说的“字符串”是什么意思?你能举一些例子吗?
    • 我可以在一个单独的问题中提问,但我已经用示例编辑了我的问题。
    • @Austin 通过编辑您的问题,您使这个答案变得无关紧要。这个网站不是为了解决你的问题。这是为了帮助每个人,因此我们希望未来的访问者能够获得类似问题的帮助。请提出一个新问题。我回滚了你的编辑。顺便说一句,您发布的新代码充满了错误。不知何故,您误解了我的答案并将其应用于一切。只需在我的答案中使用代码按原样,您的新问题就会消失。单词边界应该添加到 regex only
    • 这正是我犹豫是否给你提供你要求的“具体例子”的原因。我表示我没有问题发布另一个问题。我认为我编辑的代码会有两行错误,因为这是我进行更改的仅有的两行。我是一名新程序员,不知道单词边界技术仅适用于正则表达式。再次感谢您的帮助。保持“原样”将有助于我的新问题大部分消失,除了嵌入的单词。
    猜你喜欢
    • 1970-01-01
    • 2023-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多