小写第一个单词

时间:2014-01-30 14:45:31

标签: vb.net word lowercase

有人知道如何为文本框中的每一行小写第一个单词吗?

不是第一个字母,第一个字。

我尝试过这样但不起作用:

For Each iz As String In txtCode.Text.Substring(0, txtCode.Text.IndexOf(" "))
     iz = LCase(iz)
Next

5 个答案:

答案 0 :(得分:3)

当你调用Substring时,它正在复制字符串的那一部分并将其作为新的字符串对象返回。因此,即使您成功更改了返回的子字符串的值,它仍然不会更改Text属性中的原始字符串。

但是,.NET中的字符串是不可变的引用类型,因此当您设置iz = ...时,您正在重新分配iz变量以指向另一个新的字符串对象。设置iz时,您甚至没有触及它先前指向的复制子字符串的值。

为了更改文本框的值,您必须实际为其Text属性分配一个新的字符串值,如下所示:

txtCode.Text = "the new value"

既然如此,我建议使用StringBuilder对象构建一个新字符串,然后在修改后的字符串完成后,将文本框的Text属性设置为新的字符串,例如:

Dim builder As New StringBuilder()
For Each line As String In txtCode.Text.Split({Environment.NewLine}, StringSplitOptions.None)
    ' Fix case and append line to builder
Next
txtCode.Text = builder.ToString()

答案 1 :(得分:3)

这里的解决方案很有意思,但它们忽略了.NET的基本工具:正则表达式。该解决方案可以在一个表达式中编写

Dim result = Regex.Replace(txtCode.Text, "^\w+",
    Function (match) match.Value.ToLower(), RegexOptions.Multiline)

(这需要导入System.Text.RegularExpressions。)

这个解决方案可能比这里的所有其他解决方案更有效(它的绝对比大多数解决方案更高效),并且代码更少,因此错误的机会更少,更容易理解和维护。

答案 2 :(得分:1)

您的代码存在的问题是您在整个TextBox文本中的第一个字的每个字符上运行循环。

此代码循环遍历每一行并取第一个字:

For Each line As String In txtCode.Text.Split(Environment.NewLine)
    line = line.Trim().ToLower()

    If line.IndexOf(" ") > 0 Then
        line = line.Substring(0, line.IndexOf(" ")).Trim()
    End If

    // do something with 'line' here
Next

答案 3 :(得分:1)

循环遍历文本框的每一行,拆分行中的所有单词,确保.ToLower()第一个单词:

    Dim strResults As String = String.Empty

    For Each strLine As String In IO.File.ReadAllText("C:\Test\StackFlow.txt").Split(ControlChars.NewLine)

        Dim lstWords As List(Of String) = strLine.Split(" ").ToList()

        If Not lstWords Is Nothing Then

            strResults += lstWords(0).ToLower()

            If lstWords.Count > 1 Then

                For intCursor As Integer = 1 To (lstWords.Count - 1)

                    strResults += " " & lstWords(intCursor)

                Next

            End If

        End If

    Next

答案 4 :(得分:-2)

我使用了你的想法,我就是这样做的:

For Each line As String In txtCode.Text.Split(Environment.NewLine)

            Dim abc() As String = line.Split(" ")
            txtCode.Text = txtCode.Text.Replace(abc(0), LCase(abc(0)))

Next

它的工作原理如下。谢谢大家。