読者です 読者をやめる 読者になる 読者になる

bekkou68の日記

開発しているサービス, IT技術, 英語など。

文字列の先頭文字だけを大文字に変更してその他の文字は変えない - Capitalize Only First Character of String And Make No Change for Another Characters

VBA

失敗 - Failure

文字列の先頭文字だけを大文字に変更してその他の文字は変えない。ということを以下のメソッドで実装しようとした。
I tried to implement "capitalizing only first character of string and make no change for another characters" by using the following method.

Private Function Capitalize(ByVal strTarget As String) As String
    Capitalize = Application.Proper(strTarget)
End Function

でも、"lowerCamelCase"が"Lowercamelcase"となってしまう。
But "lowerCamelCase" converted into "Lowercamelcase".


つまり、文字列の先頭文字だけを大文字に変更して「その他の文字は小文字に」なってしまう。
In short, it works like that capitalize first character and "decapitalize another characters".


これではダメ。
It's too bad.


"lowerCamelCase"を"LowerCamelCase"にしたい。
I wanna change "lowerCamelCase" into "LowerCamelCase".

実装 - Implement

なので、こうした。
Then I implemented like the following.

Private Function UCaseOnlyFirst(ByVal strTarget As String) As String
    Dim strFirst As String
    Dim strExceptFirst As String
    
    strFirst = UCase(Left$(strTarget, 1))
    strExceptFirst = Mid$(strTarget, 2, Len(strTarget))
    UCaseOnlyFirst = strFirst & strExceptFirst
End Function

テスト - Test

Option Explicit

Public Sub TestCaptalization()
    MsgBox Capitalize("lowerCamelCase")      ' Lowercamelcase
    MsgBox UCaseOnlyFirst("lowerCamelCase")  ' LowerCamelCase
End Sub

Private Function Capitalize(ByVal strTarget As String) As String
    Capitalize = Application.Proper(strTarget)
End Function

Private Function UCaseOnlyFirst(ByVal strTarget As String) As String
    Dim strFirst As String
    Dim strExceptFirst As String
    
    strFirst = UCase(Left$(strTarget, 1))
    strExceptFirst = Mid$(strTarget, 2, Len(strTarget))
    UCaseOnlyFirst = strFirst & strExceptFirst
End Function


おk。
Now, good.


もっとKOOLなやり方は無いのだろうか。。
I wonder there is any KOOLer ways ...


−ω− Ruby の String#capitalize も、上記の Application.Proper と同じ挙動をすることが分かった。
−ω− 追記 May 14, 2009: RubyActiveSupport::CoreExtensions::String::Inflections の camelize で、UCaseOnlyFirst できると分かった。