Рубрики
Без рубрики

Поиск в стиле подстановочных знаков в шаблоне Java

В наши дни на локальном компьютере и на стороне сервера у разработчиков есть огромные текстовые данные. Java предоставляет… С тегами java, подстановочный знак, текст, поиск.

В наши дни на локальном компьютере и на стороне сервера у разработчиков есть огромные текстовые данные. Java предоставляет разработчикам мощный метод сопоставления шаблонов. Но регулярное выражение шаблона Java – очень сложная ветвь для использования.

В этом посте мы увидим, что функция поиска текста основана на подстановочном ключевом слове.

Пример функции заключается в том, что получение всех объектов файла сопоставляется с ключевыми словами с подстановочными знаками в списке.

Давайте погрузимся в

Сценарий

Наш конкретный сценарий заключается в том, чтобы “Получить все исходные файлы java, соответствующие подстановочному ключевому слову. мы должны сделать так, чтобы нас видели совпадающими с номером строки и путем к файлу из стандартного ввода-вывода (терминала)”.

Шаг 1 – Создайте шаблон подстановочных знаков.

Чтобы создать регулярное выражение, необходимо настроить ключевое слово с подстановочным знаком для шаблона регулярных выражений Java.

If wildcard expression is like *static*, 
Java regex should be .*\Qstaic\E.*
And if wildcard expression is like *st*ic ,
Java regex must be .*\Qst\E.*\Qic\E.*

Чтобы сделать это, используйте Java-код, как показано ниже.

String keyword = "...*...*..
String regex = Arrays.asList(keyword.split(Pattern.quote("*"))).stream().map(s -> s.equals("") ? "" : Pattern.quote(s)).collect(Collectors.joining(".*"))+".*"

Шаг 2 – Разработка структуры функций.

  1. Введите корневой каталог, расширение фильтрации и список ключевых слов с подстановочными знаками.
  2. Получите все файлы, соответствующие расширению, в указанном корневом каталоге.
  3. Используя Java Stream API, получите всю строку и сравните каждую строку с регулярным выражением с подстановочными знаками. если соответствующий текст существует в файле, выведите номер строки, соответствующее ключевое слово и путь к файлу в STUDIO. А затем отфильтруйте несоответствующий файл и соберите соответствующий файл в списке.
  4. И распечатайте возвращенный файл на терминал.

Шаг 3 – Весь код функции.

Весь код функции приведен ниже.

    /**
     * Search Files from specified directory with file extension and wildcard keywords.
     * @param rootPath
     * @param fileExtension
     * @param wildcardKeywords
     * @return
     * @throws IOException
     */
    public static List search(Path rootPath, String fileExtension, List wildcardKeywords) throws IOException {
        //Get all files under specified path matching with specified file extention list.
        List allFiles = Files.walk(rootPath).sorted().map(Path::toFile).filter(f -> f.getName().endsWith(fileExtension)).collect(Collectors.toList());
        return allFiles.stream().map(f -> {
            try {
                //Read all lines of a file to List.
                List lines = Files.readAllLines(f.toPath());
                //matching flag
                boolean isMatching = false;
                //String line loop.
                for(int i=0; i s.equals("") ? "" : Pattern.quote(s)).collect(Collectors.joining(".*"))+".*";
                        //if a line be matched with pattern regex, print line number and file absolute path.
                        if(line.matches(regex)) {
                            //Print formatted text on STD IO.
                            System.out.println(String.format("%-10s   %-50s   %s", "LINE: "+(i+1), "MATCHING KEYWORD: "+keyword, "PATH: "+f.getAbsolutePath()));
                            isMatching = true;
                        }   
                    }
                }
                if(isMatching) {
                    return f;
                }
            } catch(IOException e) {
                e.printStackTrace();
            }
            return null;
            //Filtering null value.                     
        }).filter(f -> f != null).collect(Collectors.toList());
    }

Шаг 4 – Тест-драйв

Создайте основную функцию и протестируйте функцию “поиск”.

  • главный
    public static void main(String[] args) throws IOException {     
        Path rootPath = Paths.get("D:\\Development\\DBController");
        List wildcardKeywords = new ArrayList();
        wildcardKeywords.add("*pu*lic*");
        List resultFiles = search(rootPath, ".java", wildcardKeywords);
        resultFiles.stream().forEach(System.out::println);
    }

Я проверил функцию с произвольным исходным каталогом Java-проекта на моем локальном компьютере, а затем результат похож на изображение ниже.

Вы можете попытаться изменить или добавить функции, которые заменяют или изменяют текст вашей компании в файле при обработке в огромных масштабах.

Удачи вам!!!

Оригинал: “https://dev.to/kooin/wildcard-type-search-in-java-pattern-3h54”