开发者

Increment a number in a string and zero fill it

开发者 https://www.devze.com 2023-02-20 07:45 出处:网络
In VB.NET, I would开发者_运维百科 like to increment a number in a string and have it zeroed filled.

In VB.NET, I would开发者_运维百科 like to increment a number in a string and have it zeroed filled.

Here is the sample string with the 5 digit number:

R00099

What I would like returned after incrementing it by one:

R00100


No need for PadLeft:

Dim result = String.Format("R{0:D5}", number)

The D5 part in the formatter will format the number as a decimal number, using a fixed number of five digits, and filling the redundant digits with zeros.

More information can be found on the MSDN article about the decimal format specifier.


If the strings have been validated and are in the form specified then this should work

Private Function add1ToStringNoChecking(theString As String) As String
    'assumes many things about the input instring
    Return String.Format("{0}{1:d5}", _
                                        "R", _
                                        CInt(theString.Substring(theString.Length - 5, 5)) + 1)
End Function

Private Sub Button1_Click(sender As System.Object, _
                          e As System.EventArgs) Handles Button1.Click
    Dim testS As String = "R00009"
    Debug.WriteLine(add1ToStringNoChecking(testS))
End Sub


Assuming (with the regex tag) that you want to strip the number out first, and the input will always be in the form of letters followed by numeric then:

Function Increment(ByVal prefixedNumber As String) As String
    Dim result As String = String.Empty
    Dim numericRegex As New Text.RegularExpressions.Regex("^(\D*)(\d*)")
    Dim numericMatch As Text.RegularExpressions.Match = numericRegex.Match(prefixedNumber)

    If numericMatch.Success Then
        Dim number As Integer

        If Integer.TryParse(numericMatch.Groups(2).Value, number) Then
            result = String.Format("{0}{1:D5}", numericMatch.Groups(1).Value, number + 1)
        Else
            ' throw a non parse exception.
        End If
    Else
        ' throw a non match exception.
    End If

    Return result
End Function

Have a look at the Regex and Integer.TryParse documentation


Here is a handy function to accomplish the OP requirement:

    Public Function Counter(ByVal StartingNumber As Int32, ByVal IncrementValue As Int32, ByVal TotalNumberLength As Int32, ByVal Prefix As String) As String
        Dim Temp As Int32 = StartingNumber + IncrementValue
        Dim Temp2 As String = CStr(Temp)

Line50:
        If Temp2.Length < TotalNumberLength Then
            Temp2 = "0" & Temp2
            GoTo Line50
        ElseIf Temp2.Length = TotalNumberLength Then
            'do nothing
        Else
            'means error
            Throw New System.Exception()
        End If

        Return Prefix & Temp2

    End Function

Example of using the function:

Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    'now test the function
    MessageBox.Show(Counter(99, 1, 5, "R"))

    'it will show R00100    
End Sub

NOTE: This solution has been tested OK with Visual Studio 2010.

0

精彩评论

暂无评论...
验证码 换一张
取 消