【发布时间】:2020-04-01 09:48:30
【问题描述】:
我想将一个组件版本(例如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,这就是为什么我在寻找更聪明的选项,根据输出模式G\d\dR\d\dC\d\d在简单数字之前自动添加0,就像我们一样可以在word或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.6.0”,我有输出模式“G\d\dR\d\dC\d\d”,但是否有创建与此模式匹配的输出字符串的函数?也就是说G02R06C00
-
啊,你在找字符串格式。或者,匹配并捕获您的号码,然后使用替换中的反向引用替换(使用
String.replaceAll)以指向捕获的号码。 -
是的,我见过 replaceAll,但我正在寻找更聪明的东西,它可以自动将字符串表达式替换为输出模式,并在简单数字前自动添加 0,这要归功于输出模式 "G\d \dR\d\dC\d\d"。根据您的回复,我所做的是: String gorocoVersion = version.replaceAll("(\\d*)\\.(\\d*)\\.(\\d*)", "G$1R$2 3 加元");产生 G2R6C0,它还缺少添加 0 来匹配 2 位数字
标签: java regex string formatting version