在 vb.net 中创建连续的字母数字字符串
Creating a sequential alphanumeric string in vb.net
我想知道如何创建格式为 123ABC1 的顺序字符串。所以第一个记录是 000AAA0 到 999AAA0,然后是 000AAA1 一直到 999AAA9。接下来是 000AAB0 等等。这可能吗?谢谢
看看这个例子:
Private Function NextSequence(Optional existingSequence As String = "") As String
' beginning record
If (String.IsNullOrWhiteSpace(existingSequence)) Then
Return "000AAA0"
End If
' invalid existing sequence length
If (existingSequence.Length <> 7) Then
Throw New ArgumentException("existingSequence is not in a valid format, it is not 7 characters long")
End If
' part 1
Dim part1String As String = existingSequence.Substring(0, 3)
Dim part1Integer As Integer
If (Not Integer.TryParse(part1String, part1Integer)) Then
Throw New ArgumentException("existingSequence is not in a valid format, it does not start with a 3 digit number")
End If
' part 2
Dim part2String As String = existingSequence.Substring(3, 3)
If (Not Char.IsLetter(part2String(0)) OrElse Not Char.IsLetter(part2String(1)) OrElse Not Char.IsLetter(part2String(2))) Then
Throw New ArgumentException("existingSequence is not in a valid format, the middle part is not 3 sequential letters")
End If
' part 3
Dim part3String As String = existingSequence.Substring(6)
Dim part3Integer As Integer
If (Not Integer.TryParse(part3String, part3Integer)) Then
Throw New ArgumentException("existingSequence is not in a valid format, it does not end with a 1 digit number")
End If
' get the alpha characters
Dim alphabet() As Char = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".ToCharArray()
existingSequence = existingSequence.ToUpper()
' increment the sequence
part3Integer += 1
If (part3Integer = 10) Then
part3Integer = 0
End If
Dim shouldIncrease As Boolean = part3Integer = 0
If (shouldIncrease) Then
Dim nextCharacterIndex As Integer = Array.IndexOf(alphabet, part2String(2)) + 1
shouldIncrease = nextCharacterIndex = alphabet.Length
If (shouldIncrease) Then
nextCharacterIndex = 0
End If
part2String = new String({part2String(0), part2String(1), alphabet(nextCharacterIndex)})
End If
If (shouldIncrease) Then
Dim nextCharacterIndex As Integer = Array.IndexOf(alphabet, part2String(1)) + 1
shouldIncrease = nextCharacterIndex = alphabet.Length
If (shouldIncrease) Then
nextCharacterIndex = 0
End If
part2String = new String({part2String(0), alphabet(nextCharacterIndex), part2String(2)})
End If
If (shouldIncrease) Then
Dim nextCharacterIndex As Integer = Array.IndexOf(alphabet, part2String(0)) + 1
shouldIncrease = nextCharacterIndex = alphabet.Length
If (shouldIncrease) Then
nextCharacterIndex = 0
End If
part2String = new String({alphabet(nextCharacterIndex), part2String(1), part2String(2)})
End If
If (shouldIncrease) Then
part1Integer += 1
If (part1Integer > 999) Then
Throw New ArgumentOutOfRangeException("existingSequence")
End If
End If
Return part1Integer.ToString("D3") & part2String & part3Integer.ToString("D1")
End Function
Fiddle: https://dotnetfiddle.net/8DyrUG
这样做是将传入序列分成三部分:
- 第一部分为前三位数字
- 第二部分是中间三个字母
- 第三部分为最后一位
对于第三部分,它将数字值递增 1。如果达到 10,则将其重置回 0 并指示第二部分应该更新。
对于第二部分,尝试递增 A-Z 中的每个字母,如果一个字母更新为“Z”,则随后更新之前的字母。
对于第一部分,如果更新了中间字母的第一个字母,那么它会增加整数。
如果到达1000AAA9,则抛出异常(表示序列结束)。
我想知道如何创建格式为 123ABC1 的顺序字符串。所以第一个记录是 000AAA0 到 999AAA0,然后是 000AAA1 一直到 999AAA9。接下来是 000AAB0 等等。这可能吗?谢谢
看看这个例子:
Private Function NextSequence(Optional existingSequence As String = "") As String
' beginning record
If (String.IsNullOrWhiteSpace(existingSequence)) Then
Return "000AAA0"
End If
' invalid existing sequence length
If (existingSequence.Length <> 7) Then
Throw New ArgumentException("existingSequence is not in a valid format, it is not 7 characters long")
End If
' part 1
Dim part1String As String = existingSequence.Substring(0, 3)
Dim part1Integer As Integer
If (Not Integer.TryParse(part1String, part1Integer)) Then
Throw New ArgumentException("existingSequence is not in a valid format, it does not start with a 3 digit number")
End If
' part 2
Dim part2String As String = existingSequence.Substring(3, 3)
If (Not Char.IsLetter(part2String(0)) OrElse Not Char.IsLetter(part2String(1)) OrElse Not Char.IsLetter(part2String(2))) Then
Throw New ArgumentException("existingSequence is not in a valid format, the middle part is not 3 sequential letters")
End If
' part 3
Dim part3String As String = existingSequence.Substring(6)
Dim part3Integer As Integer
If (Not Integer.TryParse(part3String, part3Integer)) Then
Throw New ArgumentException("existingSequence is not in a valid format, it does not end with a 1 digit number")
End If
' get the alpha characters
Dim alphabet() As Char = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".ToCharArray()
existingSequence = existingSequence.ToUpper()
' increment the sequence
part3Integer += 1
If (part3Integer = 10) Then
part3Integer = 0
End If
Dim shouldIncrease As Boolean = part3Integer = 0
If (shouldIncrease) Then
Dim nextCharacterIndex As Integer = Array.IndexOf(alphabet, part2String(2)) + 1
shouldIncrease = nextCharacterIndex = alphabet.Length
If (shouldIncrease) Then
nextCharacterIndex = 0
End If
part2String = new String({part2String(0), part2String(1), alphabet(nextCharacterIndex)})
End If
If (shouldIncrease) Then
Dim nextCharacterIndex As Integer = Array.IndexOf(alphabet, part2String(1)) + 1
shouldIncrease = nextCharacterIndex = alphabet.Length
If (shouldIncrease) Then
nextCharacterIndex = 0
End If
part2String = new String({part2String(0), alphabet(nextCharacterIndex), part2String(2)})
End If
If (shouldIncrease) Then
Dim nextCharacterIndex As Integer = Array.IndexOf(alphabet, part2String(0)) + 1
shouldIncrease = nextCharacterIndex = alphabet.Length
If (shouldIncrease) Then
nextCharacterIndex = 0
End If
part2String = new String({alphabet(nextCharacterIndex), part2String(1), part2String(2)})
End If
If (shouldIncrease) Then
part1Integer += 1
If (part1Integer > 999) Then
Throw New ArgumentOutOfRangeException("existingSequence")
End If
End If
Return part1Integer.ToString("D3") & part2String & part3Integer.ToString("D1")
End Function
Fiddle: https://dotnetfiddle.net/8DyrUG
这样做是将传入序列分成三部分:
- 第一部分为前三位数字
- 第二部分是中间三个字母
- 第三部分为最后一位
对于第三部分,它将数字值递增 1。如果达到 10,则将其重置回 0 并指示第二部分应该更新。
对于第二部分,尝试递增 A-Z 中的每个字母,如果一个字母更新为“Z”,则随后更新之前的字母。
对于第一部分,如果更新了中间字母的第一个字母,那么它会增加整数。
如果到达1000AAA9,则抛出异常(表示序列结束)。