增加字符串的数字部分,但将字符部分保留在 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);
我遇到了几个问题,但我的问题没有答案。
我有一个来自数据库的代码,格式如下: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);