我的.Net代码中有ProperCase
函数,如此
Public Function ProperCase(ByVal strValue As String) As String
Dim outString As String = ""
Dim badWords As String = "and, at, do, de, du, USA, UK"
Dim splitter(1) As Char
splitter(0) = " "
Dim splitString As String() = strValue.Split(splitter)
For Each s As String In splitString
If badWords.Contains(s) Then
outString = outString & s & " "
Else
outString = outString & StrConv(s, VbStrConv.ProperCase) & " "
End If
Next
Return Trim(outString)
End Function
我需要设置像Taylor-Smith
这样的双管名称,但它会像Taylor-smith
一样出现,因为拆分器是一个空格,所以我修改了代码。
Public Function ProperCase(ByVal strValue As String) As String
Dim outString As String = ""
Dim badWords As String = "and, at, do, de, du, USA, UK"
Dim splitter(2) As Char
splitter(0) = " "
splitter(1) = "-"
Dim splitString As String() = strValue.Split(splitter)
For Each s As String In splitString
If badWords.Contains(s) Then
outString = outString & s
Else
outString = outString & StrConv(s, VbStrConv.ProperCase)
End If
Next
Return Trim(outString)
End Function
所以我在函数中添加了一个额外的拆分器,但是现在它没有用连字符返回值。我从outString的末尾删除了& " "
但是我不知道我可以用它替换它
我尝试添加& splitter
,但即使分割符是空格,它也会返回连字符。
目前,我的修改后的代码
Mr TomHart
Mr JamieTaylorSmith
使用第一个版本的代码我得到了这个
Mr Tom Hart
Mr Jamie Taylor-smith
我的预期产出是这样的......
Mr Tom Hart
Mr Jamie Taylor-Smith
有什么想法吗?
答案 0 :(得分:1)
我根本不会改变split方法来捕捉连字符。相反,我会看一下。在您更改之前,由您的第一个方法产生。可能在循环内部的If。
这是一个非常快速的想法,以它为基础...不一定是最干净的版本,但应该给你的想法:
Dim outstring As String = "Michael James-smith"
Dim indexOfCharToCheck As Integer = outstring.LastIndexOf("-"c) + 1
Dim finalString As String = outstring.Substring(0, indexOfCharToCheck) & UCase(outstring(indexOfCharToCheck).ToString) & outstring.Substring(indexOfCharToCheck + 1)
MsgBox(finalString)