0

「 A1B2000C 」のように、文字と数字の両方を含むシリアル番号があります。番号部分+1を増やして、次のシリアル番号を生成したいと思います。次のシリアル番号はA1B2001Cになります。それをアーカイブする方法はありますか?

4

4 に答える 4

2

1行ではありませんが...

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

実は1行でできるんです!

String ouput = input.replaceAll("(.*)\\d+(\\D*)", "$1" + (Integer.parseInt(input.replaceAll(".*(\\d+)\\D*", "$1") + 1) "$2");

しかし、読みやすさは損なわれます

于 2012-11-23T02:41:09.610 に答える
0

シリアル番号の背後にある論理を知っている必要があります。どの部分が何を意味するのか。どの部分をインクリメントするか、どの部分をインクリメントしないか。次に、番号をコンポーネントに分割し、新しい番号をインクリメントして作成します。

于 2012-11-23T02:40:31.090 に答える
0

次のような正規表現でシリアル番号を解析できます。

([A-Z]\d+[A-Z])(\d+)([A-Z])$

この式によって作成された一致により、3 つのグループが得られます。グループ 2 には、インクリメントする数値が含まれています。これを整数に解析し、インクリメントしてから、group1 を新しい番号と group3 と連結して新しいシリアル番号を作成します。

于 2012-11-23T02:43:27.037 に答える
0

シリアル番号を数字として追跡し、必要なプレフィックス/サフィックスを連結することをお勧めします。

このようにして、シリアル番号をインクリメントして次のシリアル番号を生成することができ、最後に生成されたシリアル番号をスクレイピングする必要がなくなります。

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

于 2012-11-23T02:45:06.947 に答える