本课学习目标
- 理解 String 是 .NET 中的文字数据类型。
- 使用 Length 取得字符串长度。
- 使用 Trim、TrimStart、TrimEnd。
- 使用 ToUpper 与 ToLower 改变大小写。
- 理解字符串索引从 0 开始,并使用 Substring。
- 使用 Contains、StartsWith、EndsWith。
- 使用 Replace 与 IndexOf。
- 使用 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"
"中文教程"
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。
例如:
Dim text As String = "Visual"
Dim firstChar As Char = text(0)
Dim thirdChar As Char = text(2)
结果:
- firstChar = "V"c
- thirdChar = "s"c
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"
也可以只指定起始索引:
Dim yearText As String = text.Substring(13)
从索引 13 一直到字符串结尾。
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.
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)
结果会得到三个字符串:
然后可以用循环显示:
For Each item As String In parts
txtOutput.Text &= item & Environment.NewLine
Next
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
用户输入一段文字和一个搜索词,程序会显示字符数量、去除空格后的结果、大小写转换、搜索位置、是否包含关键字,以及替换结果。
包含搜索词:True
搜索位置:7
大写:VISUAL BASIC 2026 MADE EASY
加入以下控件:
| 控件 | Name | Text / 设置 |
|---|---|---|
| Form | Form1 | Text = 文字分析器 |
| TextBox | txtInput | Multiline = True |
| TextBox | txtSearch | 输入搜索文字 |
| TextBox | txtReplacement | 输入替换文字 |
| Button | btnAnalyze | Text = 分析 |
| Button | btnReplace | Text = 替换 |
| Button | btnClear | Text = 清除 |
| TextBox | txtOutput | Multiline = 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 逐步理解文字分析流程
txtInput.Text 保存用户输入的完整 String。
使用 Trim、ToUpper、ToLower、Contains、IndexOf 等方法分析文字。
有些方法返回 String,有些返回 Boolean,有些返回 Integer。
把多个结果组合成容易阅读的输出文字。
使用 Environment.NewLine 把不同分析结果分行显示。
11.15 常见字符串方法返回什么?
| 成员 | 典型返回类型 | 例子 |
|---|---|---|
| Length | Integer | 文字长度 |
| Trim() | String | 清理后的新字符串 |
| ToUpper() | String | 大写版本 |
| Contains() | Boolean | True / False |
| IndexOf() | Integer | 位置或 -1 |
| Replace() | String | 替换后的新字符串 |
| Split() | String() | 多个字符串组成的数组 |
11.16 初学者常见错误
忘记索引从 0 开始
第一个字符是索引 0,而不是 1。
Substring 超出范围
起点或长度超过字符串实际范围,会产生异常。
以为 Replace 会直接修改原变量
String 不可变。Replace 返回新字符串,应把结果保存或显示。
忽略大小写
Contains("VB") 与 Contains("vb") 默认并不一定得到相同结果。
11.17 小练习
- 加入按钮,显示输入文字的前 5 个字符。先检查 Length 是否至少为 5。
- 加入“是否以 VB 开头”的判断,使用 StartsWith。
- 加入“是否以 2026 结尾”的判断,使用 EndsWith。
- 让用户输入一串以逗号分隔的课程名称,使用 Split 后逐行显示。
- 把输出全部改成字符串插值形式。
- 尝试搜索一个不存在的词,并观察 IndexOf 返回什么。
本课复习
- Length 是属性还是方法?
- Trim() 的作用是什么?
- 字符串的第一个字符索引是多少?
- Substring(7, 5) 中的两个参数分别表示什么?
- Contains() 返回什么数据类型?
- IndexOf() 找不到文字时通常返回什么?
- Replace() 会不会直接修改原 String?
- Split() 的典型用途是什么?
- 字符串插值使用什么符号开始?