パターンの正規表現に対して、Javaの文字列を変換する方法?

第九:

私は(例えばコンポーネントのバージョンを変換したい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出力パターンに応じて、あまりにも簡単な数字の前に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;
}
イリヤ・ルイセンコ:

この方法を試してください。

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のparam値2.6.0

G02R06C00

おすすめ

転載: http://10.200.1.11:23101/article/api/json?id=385352&siteId=1