识别 TextBox 中每个单词的第一个字母
Identify first letter from every word in a TextBox
我试着用我制作的表格为每个商店创建一个唯一的代码。我有两个 TextBox 控件(TBNameStore
和 TBCodeStore
)。我要的是,当我写店名的时候,比如"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 获取文本中所有单词的首字母。
使用上述 Split
和 SubString
方法以及 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
我试着用我制作的表格为每个商店创建一个唯一的代码。我有两个 TextBox 控件(TBNameStore
和 TBCodeStore
)。我要的是,当我写店名的时候,比如"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 获取文本中所有单词的首字母。
使用上述 Split
和 SubString
方法以及 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