0

私はProperCase.Netコードに次のような関数を持っています

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-SmithTaylor-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

何か案は?

4

1 に答える 1

1

ハイフンをキャッチするために分割方法をまったく変更しません。代わりに、アウトストリングを調べます。変更する前の最初のメソッドの結果です。おそらくループ内の 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)
于 2012-04-19T15:23:21.593 に答える