将字符串的首字母大写

16
我想将数组arr中字符串sent的第一个字母大写。导致代码返回错误的部分是Right函数。有什么方法可以修复它?
For Each sent In arr
    sent = UCase(Left(sent, 1)) & Right(sent, Len(sent) - 1)
    arr(i) = sent
    i = i + 1
Next
6个回答

28
你可以使用StrConv()函数来完成此操作。例如:
For i = LBound(arr) To UBound(arr)
   sent = arr(i)
   arr(i) = StrConv(sent, vbProperCase)
Next

或者不使用循环:

arr = Split(StrConv(Join$(arr, " "), vbProperCase), " ")

15

使用Mid函数构建大写字母后面的所有内容会更容易。该函数不需要指定完整长度:

For i = LBound(arr) To UBound(arr)
    sent = arr(i)
    ' Capitalize the first letter, then append everything else.
    sent = UCase(Left(sent, 1)) & Mid(sent, 2)
    arr(i) = sent
Next
此外,您可以使用 i 作为枚举器直接迭代 arr。混合和匹配使用单独的枚举器进行索引更新可能会导致问题。
结果:

此外,您可以使用 i 作为枚举器直接迭代 arr。混合和匹配使用单独的枚举器进行索引更新可能会导致问题。


6
使用strConvvbPropercase的区别和使用UCase(left(xx,1)) & mid(xx,2)的解决方案是,vbPropercase会将所有第一个字符改为大写,其他字符改为小写。 但这并不总是你想要的,有时你只想要第一个字符大写,其余字符小写。
因此,你可以使用稍微改进的解决方案:
UCase(Left(<string>,1)) & LCase(Mid(<string>,2))

非常好的和干净的。 - answerSeeker

1
尝试以下操作:
NewArr As List<string> NewArr = new List<string>()

For Each sent As String In arr    
    NewArr.Add(Application.WorksheetFunction.Proper(sent))

Next sent

arr = NewArr.ToArray()

3
请在您的答案中添加更多内容,解释您的代码是如何解决问题并为什么这么做。这有助于未来的读者理解。请参见[答案]以获取更多指导。 - Bugs
此问题是关于VBA而非VB.NET。 - SierraOscar

0
StrConv(myString, vbProperCase)

0
在我的情况下,最好的解决方案类似于Mid: =Replace(string, Left(string, 1), UCase(Left(string, 1)), , 1)。

这并没有真正回答问题。如果您有其他问题,可以点击提问进行提问。如果您想在此问题有新的回答时得到通知,则可以关注此问题。一旦您获得足够的声望,您也可以添加赏金以吸引更多关注此问题的人。- [来自审查] (/review/late-answers/31241398) - Ike

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接