Как преобразовать строку Java в регулярное выражение шаблона? - PullRequest
1 голос
/ 01 апреля 2020

Я хочу преобразовать версию компонента (например, 2.6.0) в эту форму G02R06C00. Я думаю, что это возможно с регулярным выражением и шаблоном с Java, но я не нашел как. Я видел примеры для сопоставления строки с шаблоном (в этом случае регулярное выражение было бы G\d\dR\d\dC\d\d, я думаю), но я не нашел, как преобразовать строку в другую строку с шаблоном. Заранее спасибо.

То, что я сделал, это:

String gorocoVersion = version.replaceAll("(\\d*)\\.(\\d*)\\.(\\d*)", "G$1R$2C$3");

, который выдает G2R6C0, еще не добавлено 0, чтобы соответствовать 2 цифрам. Итак, мне нужно было раньше разделить входную строку, и я больше не могу использовать replaceAll, поэтому я искал более умную опцию, которая автоматически добавит 0 перед простым di git также в соответствии с шаблоном вывода G\d\dR\d\dC\d\d Как мы можем найти в слове или в Excel

Что-то, что работает с версией моментального снимка, но очень уродливо:

/**
 * @return version in G00R00C00(-SNAPSHOT) format.
 */
private String formatVersion() {
    String gorocoVersion = "";
    if (StringUtils.isNotBlank(version)) {
        String[] versionTab = version.split("\\.");
        String partG = String.format("%02d", Integer.parseInt(versionTab[0]));
        String partR = String.format("%02d", Integer.parseInt(versionTab[1]));

        String partC = versionTab[2];
        String snapshotSuffix = "-SNAPSHOT";
        if (partC.endsWith(snapshotSuffix)) {
            partC = String.format("%02d",
                    Integer.parseInt(partC.substring(0, partC.indexOf('-')))) + snapshotSuffix;
        } else {
            partC = String.format("%02d", Integer.parseInt(partC));
        }

        gorocoVersion = "G" + partG + "R" + partR + "C" + partC;
    }
    return gorocoVersion;
}

Ответы [ 2 ]

0 голосов
/ 01 апреля 2020

Большое спасибо Илья, вот мой окончательный код, который принимает SNAPSHOT, а также версии xy:

private String formatVersion(String version) {
    if (StringUtils.isNotBlank(version)) {
        Pattern pattern = Pattern.compile("^(\\d+)\\.(\\d+)\\.?(\\d+)?(-\\w*)?");
        Matcher matcher = pattern.matcher(version);
        if (matcher.find()) {
            return String.format("G%02dR%02dC%02d%s", Integer.parseInt(matcher.group(1)),
                    Integer.parseInt(matcher.group(2)),
                    matcher.group(3) != null ? Integer.parseInt(matcher.group(3)) : 0,
                    matcher.group(4) != null ? matcher.group(4) : "");
        }
    }
    return version;
}

С этим кодом 2.6 дает G02R06C00, а 2.6.1-SNAPSHOT дает G02R06C01-SNAPSHOT, идеально:)

0 голосов
/ 01 апреля 2020

Попробуйте этот метод:

private static String formatVersion(String version) {
    Pattern pattern = Pattern.compile("^(\\d+)\\.(\\d+)\\.(\\d+)(-SNAPSHOT)*$");
    Matcher matcher = pattern.matcher(version);
    if (matcher.find()) {
        return String.format("G%02dR%02dC%02d", Integer.parseInt(matcher.group(1)), Integer.parseInt(matcher.group(2)), Integer.parseInt(matcher.group(3)));
    } else {
        throw new IllegalArgumentException("Unsupported version format");
    }
}

Выход для значения параметра version 2.6.0:

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