如何根据模式正则表达式转换 Java 字符串?
How to convert a Java string against a pattern regex?
我想将组件版本(例如 2.6.0
)转换为这种形式 G02R06C00
。我认为使用 Java 的正则表达式和模式是可能的,但我没有找到方法。我见过将字符串与模式匹配的示例(在这种情况下,我猜正则表达式是 G\d\dR\d\dC\d\d
),但我没有找到如何将字符串转换为具有模式的其他字符串。提前致谢。
我所做的是:
String gorocoVersion = version.replaceAll("(\d*)\.(\d*)\.(\d*)", "GRC");
生成 G2R6C0
,但缺少添加 0
以匹配 2
数字。
所以,我之前必须拆分输入字符串,我不能再使用 replaceAll
,这就是为什么我一直在寻找更聪明的选项,根据输出模式 [=] 在简单数字之前自动添加 0
15=],就像我们可以在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;
}
试试这个方法:
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
非常感谢 Ilya,这是我接受 SNAPSHOT 和 x.y 版本的最终代码:
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,完美:)
我想将组件版本(例如 2.6.0
)转换为这种形式 G02R06C00
。我认为使用 Java 的正则表达式和模式是可能的,但我没有找到方法。我见过将字符串与模式匹配的示例(在这种情况下,我猜正则表达式是 G\d\dR\d\dC\d\d
),但我没有找到如何将字符串转换为具有模式的其他字符串。提前致谢。
我所做的是:
String gorocoVersion = version.replaceAll("(\d*)\.(\d*)\.(\d*)", "GRC");
生成 G2R6C0
,但缺少添加 0
以匹配 2
数字。
所以,我之前必须拆分输入字符串,我不能再使用 replaceAll
,这就是为什么我一直在寻找更聪明的选项,根据输出模式 [=] 在简单数字之前自动添加 0
15=],就像我们可以在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;
}
试试这个方法:
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
非常感谢 Ilya,这是我接受 SNAPSHOT 和 x.y 版本的最终代码:
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,完美:)