Как преобразовать код Python в код Java? - PullRequest
0 голосов
/ 17 мая 2019

У меня есть файл abc.text

abc.text

feature bgp

interface e1/1

banner motd _ Interface Eth0

interface e1/2

interface e1/3

interface e1/4

_

vrf myvrf_50000

interface e1/5

У меня есть код Python, который находит первый символ после баннера motd, который заканчивается символом и удаляет эти строки.

    for line in config:
        banner_line = re.match(r'banner motd (.)', line)
        if banner_line:
            banner_end_char = banner_line.group(1)
            LOGGER.debug("Banner end char %s %s", banner_end_char, line)
            device_config_tree['.banner'].append(line)
            # print banner_end_char
            if line[13:].count(banner_end_char) == 0:
                banner_mode = True
        elif banner_mode:
            depth = 1
            device_config_tree['.banner'].append(line)
            LOGGER.debug("Banner mode %s ", line)
            if banner_end_char in line:
                banner_mode = False
            continue

Я написал код в Java, как

String line = new String(Files.readAllBytes(Paths.get("E:\\JavainHolidays\\LearnJava\\Practice\\abc.txt")), StandardCharsets.UTF_8);

    System.out.println(line);

    String pattern = "abs mod (.)";

    Pattern r = Pattern.compile(pattern);

    Matcher m = r.matcher(line);
    if (m.find())
    {
    System.out.println("\nFound Value: " + m.group(1))
    }

Может кто-нибудь сказать мне, как написать оставшиеся строки ??

Вывод должен быть просто нужнообрезать строку, которая начинается с баннера motd _ и заканчивается _, а также строки между баннером motd _ и _.

abc.text

feature bgp

interface e1/1

vrf myvrf_50000

interface e1/5

1 Ответ

0 голосов
/ 17 мая 2019

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

import re

input_file = 'input_file.txt'

file_content = open(input_file).read()
bc = re.findall('banner motd (.)', file_content)[0]

file_content = re.sub('banner motd ' + bc + '.*?' + bc, '', file_content, flags=re.DOTALL)

# This is the output file content. Can be written to output file
print(file_content)

Используя ту же логику в JAVA.Код может быть написан как показано ниже.

private static void removeBanners() throws IOException {
        String inputFile = "input_file.txt";

        String fileContent = new String(Files.readAllBytes(Paths.get(inputFile)));

        final Matcher matcher = Pattern.compile("banner motd (.)").matcher(fileContent);

        String bannerChar = null;
        if (matcher.find()) {
            bannerChar = matcher.group(1);
        }

        if (bannerChar != null) {
            final Matcher matcher1 = Pattern.compile("banner motd " + bannerChar + ".*?" + bannerChar, Pattern.DOTALL).matcher(fileContent);
            String result = fileContent;
            while (matcher1.find()) {
                result = result.replaceAll(matcher1.group(), "");
            }
            System.out.println(result);
        } else {
            System.out.println("No banner char found");
        }

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...