增加字符串的数字部分,但将字符部分保留在 Java 中

Increment the number part of a String but keeping the character part in Java

我遇到了几个问题,但我的问题没有答案。

我有一个来自数据库的代码,格式如下:FR000009。

输出应该是:FR000010

String original = "FR000009";
    String incremented = "FR" +  String.format("%0" + (original.length() - 2) + "d",
            Integer.parseInt(original.substring(2)) + 1);
    System.out.println(incremented);

与其他问题的不同之处在于:我想解析字符串而不需要像上面的例子那样硬编码 FR。有时会有不同的国家代码(DE、UK、RO 等)。

您可以通过先去除所有数字然后去除所有数字来使用此代码 non-digits:

String original = "FR000009";

String repl = String.format("%s%0" + (original.length() - 2) + "d",
    original.replaceFirst("\d+", ""),
   (Integer.valueOf(original.replaceFirst("\D+", "")) + 1));
//=> "FR000010"

这里:

  • replaceFirst("\d+", ""):从输入中删除所有数字,得到 FR
  • replaceFirst("\D+", ""):从输入中删除所有 non-digits,得到 000009

请注意,如果开头总是只有 2 个字母,剩下的是数字,那么您甚至不需要正则表达式代码,只需使用 substring:

String repl = String.format("%s%0" + (original.length() - 2) + "d",
   original.substring(0, 2),
   (Integer.valueOf(original.substring(2)) + 1));

您需要一种可以传入国家代码并从旧字符串创建新字符串的方法。

您的要求不明确。我不知道你是否总是想增加值,而不考虑国家代码。

我认为您需要比字符串更好的抽象。我不知道这个 String 是什么,但我建议使用带有静态计数器的 class 和一种在递增计数器后采用国家代码和 returns String 值的方法。无需解析。

为什么不在数字和字母之间拆分:

String input = "FR100109";
String[] splited = input.split("(?<=\D)(?=\d)");
int incremented = Integer.parseInt(splited[1]) + 1;
String formated = String.format("%0"+ splited[1].length() + "d", incremented);
System.out.println(splited[0] + formated);