增加字符串中的字符

Jef*_*f B 1 vb.net

我有一个2个字符的字符串,只由26个大写字母组成,'A'通过'Z'.

我们知道"最高"使用值(e..g的方式"IJ"{"AB", "AC", "DD", "IH", "IJ"}).我们想得到"下一个"值("IK"如果"IJ"是"最高").

Function GetNextValue(input As String) As String
  Dim first = input(0)
  Dim last = input(1)
  If last = "Z"c Then
    If first = "Z"c Then Return Nothing

    last = "A"c
    first++
  Else
    last++
  EndIf

  Return first & last
End Function
Run Code Online (Sandbox Code Playgroud)

显然char++在VB.NET中不是有效的语法.C#显然允许你这样做.是不是有什么比这少丑会增加一个字母?(注意:Option Strict已开启)

CChar(CInt(char)+1).ToString
Run Code Online (Sandbox Code Playgroud)

编辑:如评论/答案中所述,上述行甚至不会编译.你不能在VB.NET中转换Char - > Integer.

Jon*_*ton 9

到目前为止最简单的是:

Dim a As Char = "a"
a = Chr(Asc(a) + 1)
Run Code Online (Sandbox Code Playgroud)

这仍然需要处理"z"边界条件,具体取决于您需要的行为.

有趣的是,char++通过developerfusion 转换表明char += 1应该有效.它没有.(VB.Net似乎没有像C#那样隐式地从char转换为int16).

为了使事情变得非常好,你可以通过传递char byref来扩展.现在,这包括一些验证,并重置为a:

<Extension>
Public Sub Inc(ByRef c As Char)

    'Remember if input is uppercase for later
    Dim isUpper = Char.IsUpper(c)

    'Work in lower case for ease
    c = Char.ToLower(c)

    'Check input range
    If c < "a" Or c > "z" Then Throw New ArgumentOutOfRangeException

    'Do the increment
    c = Chr(Asc(c) + 1)

    'Check not left alphabet
    If c > "z" Then c = "a"

    'Check if input was upper case
    If isUpper Then c = Char.ToUpper(c)

End Sub
Run Code Online (Sandbox Code Playgroud)

然后你只需要打电话:

Dim a As Char = "a"        
a.Inc() 'a is now = "b"
Run Code Online (Sandbox Code Playgroud)