识别 TextBox 中每个单词的第一个字母

Identify first letter from every word in a TextBox

我试着用我制作的表格为每个商店创建一个唯一的代码。我有两个 TextBox 控件(TBNameStoreTBCodeStore)。我要的是,当我写店名的时候,比如"Brothers in Arm",在TBNameStore里,那么TBCodeStore应该自动填上文本 "BIA".

我该怎么做?

好吧,我写了一个代码可以帮助你解决你的问题。

Option Strict On
Public Class Form1
    Public Function GetInitials(ByVal MyText As String) As String
        Dim Initials As String = ""
        Dim AllWords() As String = MyText.Split(" "c)
        For Each Word As String In AllWords
            If Word.Length > 0 Then
                Initials = Initials & Word.Chars(0).ToString.ToUpper
            End If
        Next
        Return Initials
    End Function
    Private Sub TBNameStore_TextChanged(sender As Object, e As EventArgs) Handles TBNameStore.TextChanged
        TBCodeStore.Text = GetInitials(TBNameStore.Text)
    End Sub
End Class

如您所见,GetInitials 获取文本中所有单词的首字母。

使用上述 SplitSubString 方法以及 LINQ 的可能解决方案如下所示:

  • 创建一个 StringBuilder 来存储每个单词的第一个字符
  • 使用String.Split方法
  • 使用指定的分隔符(默认为空space)分隔单词
  • 将数组转换为列表以应用 LINQ-ToList 扩展 => ToList()
  • 对于每个找到的单词 => ForEach(sub (word as String) ...
  • 从单词中取出第一个字符,将其转换为大写并放入结果中 => result.Append(word.SubString(0, 1).ToUpper())
  • return 结果为字符串 => result.ToString()

代码如下所示:

private function abbreviation(input as String, optional delimiter as String = " ")
    dim result = new StringBuilder()
    input.Split(delimiter) _ 
        .ToList()         _
        .ForEach(sub (word as String)
                    result.Append(word.SubString(0, 1).ToUpper()) 
                end sub)
    return result.ToString()

end function

用法:

dim s = "Brothers in Arms"
Console.WriteLine("{0} => {1}", s, abbreviation(s))

并且输出看起来像预期的那样:

Brothers in Arms => BIA