具有连字符的正确案例功能

时间:2012-04-19 14:44:12

标签: vb.net casing

我的.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

有什么想法吗?

1 个答案:

答案 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)