VB Visual Basic 2026 中文教程
第 11 课 · 文字数据

字符串处理

绝大多数应用都会处理文字:姓名、地址、搜索关键字、产品代码、电子邮件、备注与消息等。Visual Basic 的 String 类型提供大量实用属性和方法,可以轻松检查、截取、查找、替换、转换和拆分文字。

适合:完成第 10 课的初学者建议时间:50–65 分钟实作:TextAnalyzer2026

本课学习目标

  • 理解 String 是 .NET 中的文字数据类型。
  • 使用 Length 取得字符串长度。
  • 使用 TrimTrimStartTrimEnd
  • 使用 ToUpperToLower 改变大小写。
  • 理解字符串索引从 0 开始,并使用 Substring
  • 使用 ContainsStartsWithEndsWith
  • 使用 ReplaceIndexOf
  • 使用 Split 拆分文字。
  • 认识字符串连接与字符串插值。
  • 完成一个 Windows Forms 文字分析器。

11.1 String 是什么?

String 用来保存文字。一个字符串可以是一个字符、一个单词、一句话,也可以是一大段文字。

Dim studentName As String = "李明"
Dim courseName As String = "Visual Basic 2026"
Dim message As String = "欢迎学习 VB.NET!"

字符串通常放在双引号中:

"Hello"
"Visual Basic 2026"
"中文教程"
TextBox.Text 就是 String 不管用户输入的是“张三”还是“12345”,TextBox.Text 取得的都是字符串。要进行数学运算时,才需要转换成 Integer、Double 或 Decimal。

11.2 Length:取得文字长度

Length 是 String 的属性,用来取得字符数量:

Dim text As String = "Visual Basic"
Dim count As Integer = text.Length

结果是 12,因为空格也算一个字符。

"VB".Length

结果:2

V 和 B 两个字符。

"VB 2026".Length

结果:7

中间空格也计算在内。

"中文".Length

结果:2

两个中文字各算一个字符。

11.3 Trim:移除前后空格

用户输入时经常不小心在文字前后留下空格。Trim() 可以移除这些空格:

Dim rawText As String = "   Visual Basic 2026   "
Dim cleanText As String = rawText.Trim()

结果:

Visual Basic 2026
方法作用
Trim()移除开头和结尾的空白。
TrimStart()只移除开头的空白。
TrimEnd()只移除结尾的空白。

11.4 ToUpper 与 ToLower

可以快速把英文文字转换成大写或小写:

Dim text As String = "Visual Basic 2026"

Dim upperText As String = text.ToUpper()
Dim lowerText As String = text.ToLower()

结果:

  • VISUAL BASIC 2026
  • visual basic 2026

这对不区分大小写的简单比较很有帮助:

Dim courseCode As String = txtCode.Text.Trim().ToUpper()

If courseCode = "VB" Then
    lblResult.Text = "Visual Basic 2026"
End If

11.5 字符串索引从 0 开始

字符串中的每个字符都有位置编号,这个编号叫索引(Index)。在 .NET 中,第一个字符的索引是 0。

V索引 0
i索引 1
s索引 2
u索引 3
a索引 4
l索引 5

例如:

Dim text As String = "Visual"

Dim firstChar As Char = text(0)
Dim thirdChar As Char = text(2)

结果:

  • firstChar = "V"c
  • thirdChar = "s"c
不要把第一个字符当成索引 1 初学者最常见的错误之一就是忘记索引从 0 开始。长度为 6 的字符串,有效索引是 0 到 5。

11.6 Substring:截取部分字符串

Substring 可以从原字符串中取出一部分:

Dim text As String = "Visual Basic 2026"

Dim part1 As String = text.Substring(0, 6)
Dim part2 As String = text.Substring(7, 5)

结果:

  • part1 = "Visual"
  • part2 = "Basic"
原字符串Visual Basic 2026
起始索引7
长度5
结果Basic

也可以只指定起始索引:

Dim yearText As String = text.Substring(13)

从索引 13 一直到字符串结尾。

Substring 越界会出错 起始位置或长度如果超过实际字符串范围,程序会产生异常。因此在真实应用中,应先确认字符串长度足够。

11.7 Contains、StartsWith 与 EndsWith

这些方法都会返回 Boolean:

Dim text As String = "Visual Basic 2026"

Dim hasBasic As Boolean = text.Contains("Basic")
Dim startsVisual As Boolean = text.StartsWith("Visual")
Dim ends2026 As Boolean = text.EndsWith("2026")
Contains()

包含吗?

检查字符串内部是否出现指定文字。

StartsWith()

开头是吗?

检查字符串是否以指定文字开始。

EndsWith()

结尾是吗?

检查字符串是否以指定文字结束。

11.8 Replace:替换文字

Replace 会返回一个新字符串:

Dim text As String = "I like VB 2026."
Dim newText As String = text.Replace("VB", "Visual Basic")

结果:

I like Visual Basic 2026.
String 本身不会被原地修改 .NET 的 String 是不可变(immutable)的。像 Replace、Trim、ToUpper 这些方法会返回新的 String,因此通常要把结果赋回变量或另一个变量。

11.9 IndexOf:查找文字位置

IndexOf 会返回某段文字第一次出现的位置:

Dim text As String = "Visual Basic 2026"
Dim position As Integer = text.IndexOf("Basic")

结果是 7。

如果找不到,通常会得到:

-1

因此可以这样判断:

Dim position As Integer = text.IndexOf("Python")

If position = -1 Then
    lblResult.Text = "找不到指定文字"
Else
    lblResult.Text = "找到的位置:" & CStr(position)
End If

11.10 Split:拆分字符串

如果一段文字用逗号、空格或其他分隔符分开,可以使用 Split

Dim data As String = "VB,CSharp,Python"
Dim parts() As String = data.Split(","c)

结果会得到三个字符串:

VB CSharp Python

然后可以用循环显示:

For Each item As String In parts
    txtOutput.Text &= item & Environment.NewLine
Next
这里提前看到数组 parts() 是字符串数组。本课只需要知道 Split 会产生多个字符串。第 16 课会系统学习数组与 List(Of T)。

11.11 字符串连接与插值

使用 & 连接

Dim name As String = "李明"
Dim score As Integer = 88

Dim message As String =
    "学生:" & name & ",成绩:" & CStr(score)

使用字符串插值

Dim message As String =
    $"学生:{name},成绩:{score}"

字符串插值使用 $"...",大括号里可以放变量或表达式。对于需要插入多个值的文字,通常更容易阅读。

& 连接

适合简单组合,也能清楚看到每一段字符串。

字符串插值

当固定文字中包含多个变量时,通常更自然、更容易阅读。

11.12 检查空字符串

初学阶段常见写法:

If txtName.Text.Trim() = "" Then
    lblResult.Text = "请输入姓名。"
End If

.NET 也提供:

If String.IsNullOrWhiteSpace(txtName.Text) Then
    lblResult.Text = "请输入姓名。"
End If

IsNullOrWhiteSpace 能检查 Nothing、空字符串以及只包含空白的字符串,因此在输入验证中很实用。

11.13 实作:文字分析器

建立新的 Windows Forms 项目:

TextAnalyzer2026

用户输入一段文字和一个搜索词,程序会显示字符数量、去除空格后的结果、大小写转换、搜索位置、是否包含关键字,以及替换结果。

Text Analyzer 2026
输入文字:
Visual Basic 2026 Made Easy
搜索文字:
Basic
替换文字:
VB.NET
操作:
分析替换清除
字符数:27
包含搜索词:True
搜索位置:7
大写:VISUAL BASIC 2026 MADE EASY

加入以下控件:

控件NameText / 设置
FormForm1Text = 文字分析器
TextBoxtxtInputMultiline = True
TextBoxtxtSearch输入搜索文字
TextBoxtxtReplacement输入替换文字
ButtonbtnAnalyzeText = 分析
ButtonbtnReplaceText = 替换
ButtonbtnClearText = 清除
TextBoxtxtOutputMultiline = True;ReadOnly = True;ScrollBars = Vertical

分析按钮

Private Sub btnAnalyze_Click(sender As Object, e As EventArgs) _
    Handles btnAnalyze.Click

    Dim inputText As String = txtInput.Text
    Dim searchText As String = txtSearch.Text

    Dim trimmedText As String = inputText.Trim()
    Dim position As Integer = inputText.IndexOf(searchText)

    txtOutput.Text =
        $"字符数:{inputText.Length}" & Environment.NewLine &
        $"去除前后空格:{trimmedText}" & Environment.NewLine &
        $"大写:{inputText.ToUpper()}" & Environment.NewLine &
        $"小写:{inputText.ToLower()}" & Environment.NewLine &
        $"包含搜索词:{inputText.Contains(searchText)}" & Environment.NewLine &
        $"搜索位置:{position}"

End Sub

替换按钮

Private Sub btnReplace_Click(sender As Object, e As EventArgs) _
    Handles btnReplace.Click

    Dim inputText As String = txtInput.Text
    Dim searchText As String = txtSearch.Text
    Dim replacementText As String = txtReplacement.Text

    If String.IsNullOrWhiteSpace(searchText) Then
        txtOutput.Text = "请输入要搜索的文字。"
        Exit Sub
    End If

    Dim result As String =
        inputText.Replace(searchText, replacementText)

    txtOutput.Text =
        "替换后的文字:" & Environment.NewLine & result

End Sub

清除按钮

Private Sub btnClear_Click(sender As Object, e As EventArgs) Handles btnClear.Click
    txtInput.Clear()
    txtSearch.Clear()
    txtReplacement.Clear()
    txtOutput.Clear()
    txtInput.Focus()
End Sub

11.14 逐步理解文字分析流程

1
取得原文字

txtInput.Text 保存用户输入的完整 String。

2
执行 String 方法

使用 Trim、ToUpper、ToLower、Contains、IndexOf 等方法分析文字。

3
接收返回结果

有些方法返回 String,有些返回 Boolean,有些返回 Integer。

4
使用字符串插值

把多个结果组合成容易阅读的输出文字。

5
显示到多行 TextBox

使用 Environment.NewLine 把不同分析结果分行显示。

11.15 常见字符串方法返回什么?

成员典型返回类型例子
LengthInteger文字长度
Trim()String清理后的新字符串
ToUpper()String大写版本
Contains()BooleanTrue / False
IndexOf()Integer位置或 -1
Replace()String替换后的新字符串
Split()String()多个字符串组成的数组

11.16 初学者常见错误

错误 1

忘记索引从 0 开始

第一个字符是索引 0,而不是 1。

错误 2

Substring 超出范围

起点或长度超过字符串实际范围,会产生异常。

错误 3

以为 Replace 会直接修改原变量

String 不可变。Replace 返回新字符串,应把结果保存或显示。

错误 4

忽略大小写

Contains("VB")Contains("vb") 默认并不一定得到相同结果。

11.17 小练习

  1. 加入按钮,显示输入文字的前 5 个字符。先检查 Length 是否至少为 5。
  2. 加入“是否以 VB 开头”的判断,使用 StartsWith
  3. 加入“是否以 2026 结尾”的判断,使用 EndsWith
  4. 让用户输入一串以逗号分隔的课程名称,使用 Split 后逐行显示。
  5. 把输出全部改成字符串插值形式。
  6. 尝试搜索一个不存在的词,并观察 IndexOf 返回什么。

本课复习

  1. Length 是属性还是方法?
  2. Trim() 的作用是什么?
  3. 字符串的第一个字符索引是多少?
  4. Substring(7, 5) 中的两个参数分别表示什么?
  5. Contains() 返回什么数据类型?
  6. IndexOf() 找不到文字时通常返回什么?
  7. Replace() 会不会直接修改原 String?
  8. Split() 的典型用途是什么?
  9. 字符串插值使用什么符号开始?