簡體   English   中英

獲取String的最后一個數字部分

[英]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="A1B2currentSerial=000那么必須維護數字的填充變得有點棘手,但是如果你搜索,有很多解決填充問題的方法:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM