【问题标题】:How can I check for some numbers at the end of a string, and increment them by 1 if they exist?如何检查字符串末尾的一些数字,如果存在则将它们加 1?
【发布时间】:2020-04-25 10:25:54
【问题描述】:

这是一个非常具体的场景,但我在这里弄乱了语法,并且在研究最佳/功能性方法时遇到了麻烦。我将解释:假设我有一个按以下方式格式化的字符串:“My-Test-docID”、“My-Test-docID-01”、“My-Test-docID-02”、“My-Test- docID-03”等

这就是我想要完成的任务。我想首先检查字符串是否以“-[2 digit number]”结尾。如果数字结尾存在,它们将始终在连字符后跟 2 位数字,例如“-01”、“-02”、“-10”等。

示例:如果字符串是“My-Test-docID”,那么我想将其更改为“My-Test-docID-01”。

如果字符串确实以数字结尾,那么我想将它们加 1。

示例:如果字符串以“-01”结尾,我想把它改成“-02”,这样“My-Test-docID-01”就变成了“My-Test-docID -02”。如果它以“-02”结尾,则变为“-03”,这样“My-Test-docID-02”就变为“My-Test-docID-03”,等等。

我有一些伪代码的想法,但无法弄清楚确切的语法。我的直觉告诉我首先用正则表达式检查结尾,然后如果数字存在,确定最后两个数字是什么并递增 1。我要写的肯定不是最佳的,但它是为了展示什么到目前为止,我已经能够想到并希望更清楚地传达这个场景。

if (docId.endsWith("-[0-9][0-9]")) {
  //last 2 digits of docId +=1
else {
  docId = docId + "-01"
}

我感觉这最终看起来会更加复杂,但这基本上是我想要做的,我正在寻找 if 条件和 if 语句的正确语法。

注意:如果更容易,最后的数字不必在小于 10 的情况下包含零,例如“-01”和“-02”,但我认为这在结构上可能更容易。实际上,它们永远不会大于 09,但不能保证,我想尽可能动态地编写这段代码。话虽如此,甚至不可能大于“-99”,所以我并不担心。

【问题讨论】:

  • 如果字符串是My-Test-docID-99 那么它应该变成什么?
  • 这是个好问题。我注意到这确实不可能发生,但留下一个空白确实感觉很糟糕。我想把它保留为-99。实际上它甚至不会超过 10,但在极端情况下可能会超过 10。

标签: java regex string replace concatenation


【解决方案1】:

你可以在 Java 中使用这个 sn-p:

String str = "Test-docID-02";
final String regex = "^(.*-)(\\d{2})$";
final Pattern p = Pattern.compile(regex);

Matcher m = p.matcher(str);

if (m.matches()) {
    str = m.group(1) + String.format("%02d", Integer.parseInt(m.group(2)) + 1);
} else {
    str += "-01";
}

//=> Test-docID-03

正则表达式详细信息:

  • ^:开始
  • (.*-): 匹配 0 个或多个字符直到最后一个连字符并在组 #1 中捕获
  • (\\d{2}):匹配最后 2 位数字并在第 2 组中捕获
  • $:结束

请注意,它会将My-Test-docID-99 转换为My-Test-docID-100

【讨论】:

  • 谢谢你。我现在将尝试实现它并对其进行测试。不过我很好奇,这对于My-Test-docID 变为My-Test-docID-01 的情况如何工作?
  • 这似乎没有涵盖My-Test-docID 变为My-Test-docID-01 的基本情况,但这应该是我可以通过其他条件轻松完成的事情。我会在测试后确认。
  • 添加 else 语句有效。再次感谢您的帮助!
猜你喜欢
  • 2022-08-18
  • 2011-04-10
  • 1970-01-01
  • 1970-01-01
  • 2019-01-29
  • 2013-11-12
  • 1970-01-01
  • 2014-03-11
  • 1970-01-01
相关资源
最近更新 更多