Увеличить число в строке и заполнить его нулями - PullRequest
2 голосов
/ 25 марта 2011

В VB.NET я хотел бы увеличить число в строке и заполнить его нулями.

Вот пример строки с 5-значным числом:
R00099

Что я хотел бы вернуть после увеличения на единицу:
R00100

Ответы [ 4 ]

10 голосов
/ 25 марта 2011

Нет необходимости в PadLeft:

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

Часть D5 в формататоре отформатирует число как десятичное число, используя фиксированное число из пяти цифр, и заполнит избыточные цифрынули.

Более подробную информацию можно найти в статье MSDN о спецификаторе десятичного формата .

1 голос
/ 27 марта 2011

Если строки были проверены и имеют указанную форму, это должно работать

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
1 голос
/ 25 марта 2011

Предполагая (с тегом регулярного выражения), что вы хотите сначала убрать число, а ввод всегда будет в форме букв, за которыми следует цифра:

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

Посмотрите на Regex и Integer.TryParse документация

0 голосов
/ 27 июня 2011

Вот удобная функция для выполнения требования OP:

    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

Пример использования функции:

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

ПРИМЕЧАНИЕ: Это решение былопроверено нормально с Visual Studio 2010.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...