Previous topicNext topic
Help > 开发指南 > 编程基础 > 数据处理 >
字符串

字符串是我们编程过程中经常使用的数据类型。她不像逻辑型、数值型、日期型数据类型那样,用法就那些固定死的几种。字符串对于我们程序员来说,她意味着无限可能。你从任何类都可以使用ToString()方法就可见一斑了。我们编程过程中,可以将一些对象进行序列化,就是将对象转换成字符串,用来存储或传输。反序列化就是将字符串再转换成相应的对象。说的最极端的,我们写的代码本身也只是字符串,经过编译器的编译就可以转换成可以执行的程序,这个也足以说明字符串充满了无限想象与可能。

下面让我们先学习字符串的一些基础功能。

名称 分类 说明
Contains 方法 判断字符串是否包含给定的子字符串。
StartsWith 方法 确定此字符串实例的开头是否与指定的字符串匹配
EndsWith 方法 确定此字符串实例的结尾是否与指定的字符串匹配
Trim 方法 删除字符串前后的空格或指定的字符
TrimEnd 方法 删除字符串后面的空格或指定的字符
TrimStart  方法 删除字符串前面的空格或指定的字符
IndexOf 方法 报告指定字符串在此实例中的第一个匹配项的位置。该搜索从指定字符位置开始。
LastIndexOf 方法 查找给定的子字符串最后一次出现的位置
ToCharArray 方法 将此实例中的字符复制到 Unicode 字符数组。
ToUpper 方法 将字符串转换为大写
ToLower 方法 将字符串转换为小写
SubString 方法 从此实例检索子字符串。 子字符串从指定的字符位置开始且具有指定的长度。
Replace 方法 返回一个新字符串,其中当前实例中出现的所有指定字符串都替换为另一个指定的字符串。
Remove 方法 从指定位置开始,删除指定个数的字符
PadLeft 方法 返回一个新字符串,该字符串通过在此实例中的字符左侧填充指定的 Unicode 字符来达到指定的总长度,从而使这些字符右对齐。
PadRight 方法 返回一个新字符串,该字符串通过在此实例中的字符右侧填充指定的 Unicode 字符来达到指定的总长度,从而使这些字符左对齐。
Split 方法 返回的字符串数组包含此实例中的子字符串(由指定 Unicode 字符数组的元素分隔)。参数指定返回的子字符串的最大数量。
Insert 方法 在指定位置插入一个子字符串。
Chars 属性 返回指定位置的字符
Length 属性 返回字符串的长度
Concat 静态方法 连接多个字符串,主要是串连
Compare 静态方法 用于比较字符串,可以区分大小写。
Join 静态方法 串联字符串数组的所有元素,其中在每个元素之间使用指定的分隔符.
Format 静态方法 格式化文本。
IsNullOrEmpty 静态方法 判断指定的字符串是 null 还是空字符串 ("")。
IsNullOrWhiteSpace 静态方法 判断指定的字符串是 null、空还是仅由空白字符组成。

 Vb.Net
Dim strSample As String="The quick brown fox jumps over a lazy dog."
'Contains:判断字符串是否包含给定的子字符串
If strSample.Contains("quick") Then
    Proj.MsgDebug.Add("包含quick")
Else
    Proj.MsgDebug.Add("不包含quick")
End If

'判断一个字符串中是否包含其他子字符串,还可以使用IndexOf
If strSample.IndexOf("quick")>=0 Then
    Proj.MsgDebug.Add("包含quick")
Else
    Proj.MsgDebug.Add("不包含quick")
End If

If strSample.StartsWith("the") Then
    Proj.MsgDebug.Add("以the开头")
Else
    Proj.MsgDebug.Add("不是以the开头")
End If

If strSample.EndsWith("the") Then
    Proj.MsgDebug.Add("以the结尾")
Else
    Proj.MsgDebug.Add("不是以the结尾")
End If
Proj.MsgDebug.Add("大写:{0}",strSample.ToUpper())
Proj.MsgDebug.Add("小写:{0}",strSample.ToLower())
'拆分与重组
Dim arr() As String=strSample.Split(" ")
Proj.MsgDebug.Add("重新用组合分隔开的单词:{0}",String.Join(",",arr))
'插入
Proj.MsgDebug.Add("插入后:{0}",strSample.Insert(3,"插入字符串"))
'移除
Proj.MsgDebug.Add("移除后:{0}",strSample.Remove(3,"插入字符串".Length))
'查找
Proj.MsgDebug.Add("dog所处的最后位置:{0}",strSample.LastIndexOf("dog"))
Proj.MsgDebug.Add("o所处的最后位置:{0}",strSample.LastIndexOf("o"))
'截取
'截取左边几个字符串
Proj.MsgDebug.Add("截取左边三个字符串:{0}",strSample.Left(3))
Proj.MsgDebug.Add("截取左边三个字符串:{0}",strSample.Substring(0,3))
Proj.MsgDebug.Add("截取左边三个字符串:{0}",Left(strSample,3))
'截取左边几个字符串
Proj.MsgDebug.Add("截取右边三个字符串:{0}",strSample.Right(3))
Proj.MsgDebug.Add("截取右边三个字符串:{0}",strSample.Substring(strSample.Length-3,3))
Proj.MsgDebug.Add("截取右边三个字符串:{0}",Right(strSample,3))
'截取中间几个字符串
Proj.MsgDebug.Add("截取第5个字符开始,共三个字符串:{0}",strSample.Mid(4,4+3)) 
Proj.MsgDebug.Add("截取第5个字符开始,共三个字符串:{0}",strSample.Substring(4,3))
Proj.MsgDebug.Add("截取第5个字符开始,共三个字符串:{0}",Mid(strSample,5,3))

'判断是否为空
Dim strTestMsg As String=Nothing
Proj.MsgDebug.Add("IsNullOrEmpty:{0}",String.IsNullOrEmpty(strTestMsg))
Proj.MsgDebug.Add("IsNullOrWhiteSpace:{0}",String.IsNullOrWhiteSpace(strTestMsg))
strTestMsg=""
Proj.MsgDebug.Add("IsNullOrEmpty:{0}",String.IsNullOrEmpty(strTestMsg))
Proj.MsgDebug.Add("IsNullOrWhiteSpace:{0}",String.IsNullOrWhiteSpace(strTestMsg))
strTestMsg="45"
Proj.MsgDebug.Add("IsNullOrEmpty:{0}",String.IsNullOrEmpty(strTestMsg))
Proj.MsgDebug.Add("IsNullOrWhiteSpace:{0}",String.IsNullOrWhiteSpace(strTestMsg))
strTestMsg=" "
Proj.MsgDebug.Add("IsNullOrEmpty:{0}",String.IsNullOrEmpty(strTestMsg))
Proj.MsgDebug.Add("IsNullOrWhiteSpace:{0}",String.IsNullOrWhiteSpace(strTestMsg))
strTestMsg=vbcrlf
Proj.MsgDebug.Add("IsNullOrEmpty:{0}",String.IsNullOrEmpty(strTestMsg))
Proj.MsgDebug.Add("IsNullOrWhiteSpace:{0}",String.IsNullOrWhiteSpace(strTestMsg))

'比较字符串
Dim Str1 As String="sample"
Dim str2 As String="SAMPLE"
Proj.MsgDebug.Add("sample与SAMPLE普通比较是否相等:{0}",Str1=str2)
Proj.MsgDebug.Add("sample与SAMPLE用Compare比较是否相等:{0}",String.Compare(Str1,str2,False).CType(Of Boolean)()) '区分大小写
Proj.MsgDebug.Add("sample与SAMPLE用Compare比较是否相等:{0}",String.Compare(Str1,str2,True).CType(Of Boolean)()) '不区分大小写

'任务一:通过一系列处理从一句SQL语句中获得表名称
Dim strSQL As String="Select * From tableName Where ID>1"
'先获取From的位置
Dim intIndexOfFrom As Integer=strSQL.ToLower().IndexOf(" from ") '防止大小写影响,这里先统一转化成小写后再查找
'获得" from "字符串的长度
Dim intLengthOfFrom As Integer=" from ".Length
'获得" from "字符串后面剩余的字符串
Dim strLeftString As String=strSQL.Substring(intIndexOfFrom+intLengthOfFrom) '只有一个参数的时候,表示截取从某个索引后面的所有文本
Proj.MsgDebug.Add("' from '字符串后面剩余的字符串:{0}", strLeftString)
'获取" where "字符串的位置
Dim intIndexOfWhere As Integer=strLeftString.ToLower().IndexOf(" where ") '防止大小写影响,这里先统一转化成小写后再查找
Dim strTableName As String=strLeftString.Substring(0,intIndexOfWhere) '从第1位开始,长度为where字符串的起始位置
Proj.MsgDebug.Add("获得的表名称:{0}", strTableName)
strTableName=strTableName.Trim() '去除掉前后的空格,如果有的话
Proj.MsgDebug.Add("获得的表名称:{0}", strTableName)

'任务二:以表格的形式打印DatatableHelp
Dim db As Database=Proj.DatabaseForNativeIni
Dim dt As DataTableHelp=db.ExecuteDataTableHelp("Select EmployeeID,LastName,FirstName,Title,TitleOfCourtesy,City From Employees")
If dt IsNot Nothing AndAlso dt.DataRows.Count>0 Then
    For Each dr As RowData In dt.DataRows
        Dim strRowString As String=""
        For Each dc As ColData In dt.DataCols
            '将之前列组合的字符串添加一个分隔符“|”与新的数据组合
            If dc.Index>2 Then '如果是第三列往后,则
                strRowString=String.Concat(strRowString, "|" ,dr(dc.Name).ToString().PadLeft(24," "))
            Else '左边的左对齐
                strRowString=String.Concat(strRowString, "|" ,dr(dc.Name).ToString().PadRight(24," "))
            End If          
        Next
        Proj.MsgDebug.Add(strRowString.Trim("|")) '去除多余的边上的“|”分隔符后显示
    Next
End If

'返回结果:包含quick
'返回结果:包含quick
'返回结果:不是以the开头
'返回结果:不是以the结尾
'返回结果:大写:THE QUICK BROWN FOX JUMPS OVER A LAZY DOG.
'返回结果:小写:the quick brown fox jumps over a lazy dog.
'返回结果:重新用组合分隔开的单词:The,quick,brown,fox,jumps,over,a,lazy,dog.
'返回结果:插入后:The插入字符串 quick brown fox jumps over a lazy dog.
'返回结果:移除后:Thek brown fox jumps over a lazy dog.
'返回结果:dog所处的最后位置:38
'返回结果:o所处的最后位置:39
'返回结果:截取左边三个字符串:The
'返回结果:截取左边三个字符串:The
'返回结果:截取左边三个字符串:The
'返回结果:截取右边三个字符串:og.
'返回结果:截取右边三个字符串:og.
'返回结果:截取右边三个字符串:og.
'返回结果:截取第5个字符开始,共三个字符串:qui
'返回结果:截取第5个字符开始,共三个字符串:qui
'返回结果:截取第5个字符开始,共三个字符串:qui
'返回结果:IsNullOrEmpty:True
'返回结果:IsNullOrWhiteSpace:True
'返回结果:IsNullOrEmpty:True
'返回结果:IsNullOrWhiteSpace:True
'返回结果:IsNullOrEmpty:False
'返回结果:IsNullOrWhiteSpace:False
'返回结果:IsNullOrEmpty:False
'返回结果:IsNullOrWhiteSpace:True
'返回结果:IsNullOrEmpty:False
'返回结果:IsNullOrWhiteSpace:True
'返回结果:sample与SAMPLE普通比较是否相等:False
'返回结果:sample与SAMPLE用Compare比较是否相等:True
'返回结果:sample与SAMPLE用Compare比较是否相等:False
'返回结果:' from '字符串后面剩余的字符串:tableName Where ID>1
'返回结果:获得的表名称:tableName
'返回结果:获得的表名称:tableName
'返回结果:1                       |Davolio                 |Nancy                   |    Sales Representative|                     Ms.|                 Seattle
'返回结果:2                       |Fuller                  |Andrew                  |   Vice President, Sales|                     Dr.|                  Tacoma
'返回结果:3                       |Leverling               |Janet                   |    Sales Representative|                     Ms.|                Kirkland
'返回结果:4                       |Peacock                 |Margaret                |    Sales Representative|                    Mrs.|                 Redmond
'返回结果:5                       |Buchana                 |Steve                   |           Sales Manager|                     Mr.|                   Londo
'返回结果:6                       |Suyama                  |Michael                 |    Sales Representative|                     Mr.|                   Londo
'返回结果:7                       |King                    |Robert                  |    Sales Representative|                     Mr.|                   Londo
'返回结果:8                       |Callaha                 |Laura                   |Inside Sales Coordinator|                     Ms.|                 Seattle
'返回结果:9                       |Dodsworth               |Anne                    |    Sales Representative|                     Ms.|                   Londo

C#
string strSample = "The quick brown fox jumps over a lazy dog.";
// Contains:判断字符串是否包含给定的子字符串
if (strSample.Contains("quick"))
    Proj.MsgDebug.Add("包含quick");
else
    Proj.MsgDebug.Add("不包含quick");

// 判断一个字符串中是否包含其他子字符串,还可以使用IndexOf
if (strSample.IndexOf("quick") >= 0)
    Proj.MsgDebug.Add("包含quick");
else
    Proj.MsgDebug.Add("不包含quick");

if (strSample.StartsWith("the"))
    Proj.MsgDebug.Add("以the开头");
else
    Proj.MsgDebug.Add("不是以the开头");

if (strSample.EndsWith("the"))
    Proj.MsgDebug.Add("以the结尾");
else
    Proj.MsgDebug.Add("不是以the结尾");
Proj.MsgDebug.Add("大写:{0}", strSample.ToUpper());
Proj.MsgDebug.Add("小写:{0}", strSample.ToLower());
// 拆分与重组
string[] arr = strSample.Split(' ');
Proj.MsgDebug.Add("重新用组合分隔开的单词:{0}", string.Join(",", arr));
// 插入
Proj.MsgDebug.Add("插入后:{0}", strSample.Insert(3, "插入字符串"));
// 移除
Proj.MsgDebug.Add("移除后:{0}", strSample.Remove(3, "插入字符串".Length));
// 查找
Proj.MsgDebug.Add("dog所处的最后位置:{0}", strSample.LastIndexOf("dog"));
Proj.MsgDebug.Add("o所处的最后位置:{0}", strSample.LastIndexOf("o"));
// 截取
// 截取左边几个字符串
Proj.MsgDebug.Add("截取左边三个字符串:{0}", strSample.Left(3));
Proj.MsgDebug.Add("截取左边三个字符串:{0}", strSample.Substring(0, 3));
// 截取左边几个字符串
Proj.MsgDebug.Add("截取右边三个字符串:{0}", strSample.Right(3));
Proj.MsgDebug.Add("截取右边三个字符串:{0}", strSample.Substring(strSample.Length - 3, 3));
// 截取中间几个字符串
Proj.MsgDebug.Add("截取第5个字符开始,共三个字符串:{0}", strSample.Mid(4, 4 + 3));
Proj.MsgDebug.Add("截取第5个字符开始,共三个字符串:{0}", strSample.Substring(4, 3));

// 判断是否为空
string strTestMsg = null;
Proj.MsgDebug.Add("IsNullOrEmpty:{0}", string.IsNullOrEmpty(strTestMsg));
Proj.MsgDebug.Add("IsNullOrWhiteSpace:{0}", string.IsNullOrWhiteSpace(strTestMsg));
strTestMsg = "";
Proj.MsgDebug.Add("IsNullOrEmpty:{0}", string.IsNullOrEmpty(strTestMsg));
Proj.MsgDebug.Add("IsNullOrWhiteSpace:{0}", string.IsNullOrWhiteSpace(strTestMsg));
strTestMsg = "45";
Proj.MsgDebug.Add("IsNullOrEmpty:{0}", string.IsNullOrEmpty(strTestMsg));
Proj.MsgDebug.Add("IsNullOrWhiteSpace:{0}", string.IsNullOrWhiteSpace(strTestMsg));
strTestMsg = " ";
Proj.MsgDebug.Add("IsNullOrEmpty:{0}", string.IsNullOrEmpty(strTestMsg));
Proj.MsgDebug.Add("IsNullOrWhiteSpace:{0}", string.IsNullOrWhiteSpace(strTestMsg));
strTestMsg = "\n\r";
Proj.MsgDebug.Add("IsNullOrEmpty:{0}", string.IsNullOrEmpty(strTestMsg));
Proj.MsgDebug.Add("IsNullOrWhiteSpace:{0}", string.IsNullOrWhiteSpace(strTestMsg));

// 比较字符串
string Str1 = "sample";
string str2 = "SAMPLE";
Proj.MsgDebug.Add("sample与SAMPLE普通比较是否相等:{0}", Str1 == str2);
Proj.MsgDebug.Add("sample与SAMPLE用Compare比较是否相等:{0}", string.Compare(Str1, str2, false).CType<bool>()); // 区分大小写
Proj.MsgDebug.Add("sample与SAMPLE用Compare比较是否相等:{0}", string.Compare(Str1, str2, true).CType<bool>()); // 不区分大小写

// 任务一:通过一系列处理从一句SQL语句中获得表名称
string strSQL = "Select * From tableName Where ID>1";
// 先获取From的位置
int intIndexOfFrom = strSQL.ToLower().IndexOf(" from "); // 防止大小写影响,这里先统一转化成小写后再查找
// 获得" from "字符串的长度
int intLengthOfFrom = " from ".Length;
// 获得" from "字符串后面剩余的字符串
string strLeftString = strSQL.Substring(intIndexOfFrom + intLengthOfFrom); // 只有一个参数的时候,表示截取从某个索引后面的所有文本
Proj.MsgDebug.Add("' from '字符串后面剩余的字符串:{0}", strLeftString);
// 获取" where "字符串的位置
int intIndexOfWhere = strLeftString.ToLower().IndexOf(" where "); // 防止大小写影响,这里先统一转化成小写后再查找
string strTableName = strLeftString.Substring(0, intIndexOfWhere); // 从第1位开始,长度为where字符串的起始位置
Proj.MsgDebug.Add("获得的表名称:{0}", strTableName);
strTableName = strTableName.Trim(); // 去除掉前后的空格,如果有的话
Proj.MsgDebug.Add("获得的表名称:{0}", strTableName);

// 任务二:以表格的形式打印DatatableHelp
Database db = Proj.DatabaseForNativeIni;
DataTableHelp dt = db.ExecuteDataTableHelp("Select EmployeeID,LastName,FirstName,Title,TitleOfCourtesy,City From Employees");
if (dt != null && dt.DataRows.Count > 0)
{
    foreach (RowData dr in dt.DataRows)
    {
        string strRowString = "";
        foreach (ColData dc in dt.DataCols)
        {
            // 将之前列组合的字符串添加一个分隔符“|”与新的数据组合
            if (dc.Index > 2)
                strRowString = string.Concat(strRowString, "|", dr[dc.Name].ToString().PadLeft(24, ' '));
            else
                strRowString = string.Concat(strRowString, "|", dr[dc.Name].ToString().PadRight(24, ' '));
        }
        Proj.MsgDebug.Add(strRowString.Trim("|")); // 去除多余的边上的“|”分隔符后显示
    }
}

//返回结果:包含quick
//返回结果:包含quick
//返回结果:不是以the开头
//返回结果:不是以the结尾
//返回结果:大写:THE QUICK BROWN FOX JUMPS OVER A LAZY DOG.
//返回结果:小写:the quick brown fox jumps over a lazy dog.
//返回结果:重新用组合分隔开的单词:The,quick,brown,fox,jumps,over,a,lazy,dog.
//返回结果:插入后:The插入字符串 quick brown fox jumps over a lazy dog.
//返回结果:移除后:Thek brown fox jumps over a lazy dog.
//返回结果:dog所处的最后位置:38
//返回结果:o所处的最后位置:39
//返回结果:截取左边三个字符串:The
//返回结果:截取左边三个字符串:The
//返回结果:截取右边三个字符串:og.
//返回结果:截取右边三个字符串:og.
//返回结果:截取第5个字符开始,共三个字符串:qui
//返回结果:截取第5个字符开始,共三个字符串:qui
//返回结果:IsNullOrEmpty:True
//返回结果:IsNullOrWhiteSpace:True
//返回结果:IsNullOrEmpty:True
//返回结果:IsNullOrWhiteSpace:True
//返回结果:IsNullOrEmpty:False
//返回结果:IsNullOrWhiteSpace:False
//返回结果:IsNullOrEmpty:False
//返回结果:IsNullOrWhiteSpace:True
//返回结果:IsNullOrEmpty:False
//返回结果:IsNullOrWhiteSpace:True
//返回结果:sample与SAMPLE普通比较是否相等:False
//返回结果:sample与SAMPLE用Compare比较是否相等:True
//返回结果:sample与SAMPLE用Compare比较是否相等:False
//返回结果:' from '字符串后面剩余的字符串:tableName Where ID>1
//返回结果:获得的表名称:tableName
//返回结果:获得的表名称:tableName
//返回结果:1                       |Davolio                 |Nancy                   |    Sales Representative|                     Ms.|                 Seattle
//返回结果:2                       |Fuller                  |Andrew                  |   Vice President, Sales|                     Dr.|                  Tacoma
//返回结果:3                       |Leverling               |Janet                   |    Sales Representative|                     Ms.|                Kirkland
//返回结果:4                       |Peacock                 |Margaret                |    Sales Representative|                    Mrs.|                 Redmond
//返回结果:5                       |Buchana                 |Steve                   |           Sales Manager|                     Mr.|                   Londo
//返回结果:6                       |Suyama                  |Michael                 |    Sales Representative|                     Mr.|                   Londo
//返回结果:7                       |King                    |Robert                  |    Sales Representative|                     Mr.|                   Londo
//返回结果:8                       |Callaha                 |Laura                   |Inside Sales Coordinator|                     Ms.|                 Seattle
//返回结果:9                       |Dodsworth               |Anne                    |    Sales Representative|                     Ms.|                   Londo