Quiero convertir una versión del componente (por ejemplo 2.6.0
) a esta forma G02R06C00
. Creo que es posible con expresiones regulares y el patrón con Java pero no encontré la forma. He visto ejemplos para que coincida con una cadena contra un patrón (en este caso la expresión regular sería G\d\dR\d\dC\d\d
, supongo), pero no encuentro cómo convertir una cadena a otra cadena con un patrón. Gracias por adelantado.
Lo que he hecho es:
String gorocoVersion = version.replaceAll("(\\d*)\\.(\\d*)\\.(\\d*)", "G$1R$2C$3");
que produce G2R6C0
, sin embargo, le falta añadir 0
a los partidos 2
dígitos. Por lo tanto, tengo que dividir cadena de entrada antes y no puedo usar más replaceAll
, es por eso que yo estaba buscando la opción más inteligente que añadir automáticamente 0
antes sencilla dígitos también de acuerdo con el patrón de salida G\d\dR\d\dC\d\d
, al igual que podemos encontrar en Word o Excel
Algo que funciona con la versión instantánea, pero es muy feo:
/**
* @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;
}
Pruebe este método:
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");
}
}
Salida para el version
valor de parámetro 2.6.0
:
G02R06C00