[英]get last number part of a String
我有一個序列號不包含字符和數字,類似' A1B2000C ',我想通過增加數字部分+1來生成下一個序列號。 下一個序列號將是A1B2001C 。 有沒有辦法實現它?
不是一行,而是......
String input = "A1B2000C";
String number = input.replaceAll(".*(?<=\\D)(\\d+)\\D*", "$1");
int next = Integer.parseInt(number);
next++;
String ouput = input.replaceAll("(.*)(?<=\\D)\\d+(\\D*)", "$1" + next + "$2");
System.out.println(ouput);
輸出:
A1B2001C
實際上,它可以在一行中完成!
String ouput = input.replaceAll("(.*)\\d+(\\D*)", "$1" + (Integer.parseInt(input.replaceAll(".*(\\d+)\\D*", "$1") + 1) "$2");
但易讀性受到影響
你必須知道序列號背后的邏輯:哪一部分意味着什么。 哪個部分要增加,哪個不增加。 然后將數字分成組件,增加並構建新數字。
您可以使用如下所示的正則表達式解析序列號:
([A-Z]\d+[A-Z])(\d+)([A-Z])$
此表達式創建的匹配為您提供3組。 第2組包含要增加的數字。 將其解析為整數,遞增它,然后通過將group1與新數字和group3連接來構建新的序列號。
最好將序列號跟蹤為數字,並連接所需的前綴/后綴。
通過這種方式,您可以簡單地增加序列號以生成下一個序列號,而不必通過刮取最后生成的序列來進行操作。
public class Serials {
int currentSerial = 2000;
String prefix = "A1B";
String suffix = "C";
//Details omitted
public String generateSerial() {
return prefix + (currentSerial++) + suffix;
}
}
請注意,如果prefix="A1B2
和currentSerial=000
那么必須維護數字的填充變得有點棘手,但是如果你搜索,有很多解決填充問題的方法:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.