String类的概述

初次看到String这个词,大家应该都很熟悉。有的同学就会想到:它不就是C#中的一个关键字吗?我们已经接触过了啊,它就是一个数据类型而已,能有何大用?也有细心的同学会发现:这个String中的S是大写的,而string中的s是小写。呵呵……不错,“慧眼识英雄”!你想知道此“String”与彼“string”到底存在着什么关系吗?你想知道他们的区别吗?你想了解它们背后的东西吗?那就停下猜疑,我们一起来揭开“String&&string”的神秘面纱。

String类的概述

.NE T Framwork中表示字符串的关键字为string,它是String类的别名。string类型表示Unicode字符的字符串。String类类似于string类型,但是功能更强。虽然String类功能很强,它也是不可改变的,这就是说一旦创建String对象,就不能够修改。表面看来能够修改字符串的所有方法实际上不能够修改。它们实际上返回一个根据所调用的方法修改的新的String。当需要大量的修改时,可使用StringBuilder类。

String类的使用

String对象是System.Char对象的有序集合,用于表示字符串。String对象的值是该有序集合的内容,并且该值是不可变的。正是字符构成了字符串,根据字符在字符串中的不同位置,字符在字符串中有一个索引值,可以通过索引值获取索引中的某个字符。字符在字符串中的索引从0开始。

例1:创建一个控制台应用程序,声明一个字符串变量,然后获取字符串中的某个字符。

using System;

using System.Collections.Generic;

using System.Text;

namespace Text

{

classProgram

{

staticvoid Main(string[] args)

{

stringStr1 = "听过刘若英的歌吗?";

charStr2 = Str1[1];

charStr3 = Str1[2];

Console.WriteLine("字符串Str1中的第二个字符是: {0}", Str2);

Console.WriteLine("字符串Str1中的第三个字符是: {0}", Str3);

Console.ReadLine();

}

}

}

运行结果:

1.在String类下,最常见的比较字符串的方法有Compare,CompareTo和Equals等方法。

1.Compare方法用于比较两个字符串是否相等,它有很多个重载方法,其中最常用的两种方法如下:

Int compare(string strA,strin strB)

Int compare(string strA,strin strB,bool ignorCase)

批注:strA,strB代表要比较的两个字符串;ignorCase是一个bool类型的参数,如果这个参数的值为True,那么在比较字符串时就忽略大小写的差别。

Compare方法是一个静态方法,所以在使用时,可以直接使用。

例1.1:

static voidMain(string[]args)

{

stringStr1 = "听过刘若英的歌吗?";

stringStr2 = "知道不知道……讲述一段爱情的故事……?";

Console.WriteLine(String.Compare(Str1, Str2));

Console.WriteLine(String.Compare(Str1, Str1));

Console.WriteLine(String.Compare(Str2, Str1));

Console.ReadLine();

}

运行结果:

-1

0

1

注意:比较字符串并非比较字符串长度的大小,而是比较字符串在英文字典中的位置(在英文词典中,排在前面的单词小于后面的单词)。

2.CompareTo方法

CompareTo方法和Compare方法相似,都可以比较两个字符串是否相等,不同的是CompareTo方法以实例对象本身与指定的字符串作比较,语法如下“

Public int CompareTo(string strB)

例1.2:

static void Main(string[] args)

{

stringStr1 = "越单纯,越幸福";

stringStr2 = "一千零一个愿望";

Console.WriteLine(Str1.CompareTo(Str2));//输出比较后的返回值:如果值相等则返回,如果Str1> Str2则返回,否则返回-1;

Console.ReadLine();

}

3.Equals方法

用于比较两个字符串是否相同,如果相同则返回True,否则,返回False

例1.3:

static voidMain(string[]args)

{

stringStr1 = "越单纯,越幸福";

stringStr2 = "一千零一个愿望……";

Console.WriteLine(Str1.CompareTo(Str2));

Console.WriteLine(String.Equals(Str1, Str2));

Console.ReadLine();

}

运行结果:

1

False

2. 在C#中,String类提供了一个静态的Format方法,用于将字符串数据格式化成指定的格式,语法如下:

Public static stringFormat(string format,object obj);

format:用来指定字符串所要格式化的形式;

obj:要被格式化的对象。

例2.1:

static voidMain(string[]args)

{

string Str1 = "越单纯,越幸福";

string Str2 = "一千零一个愿望";

string newstr=String.Format("{0},{1}!!!", Str1, Str2);//格式化字符串

Console.WriteLine(newstr);

Console.ReadLine();

}

运行结果:

越单纯,越幸福 一千零一个愿望

在C#中已经提供的用于日期时间的格式规范,具体如下:

格式规范

说明

d

简短日期格式(YYYY-MM-dd)

D

完整日期格式(YYYY年MM月dd日)

t

简短时间格式(hh:mm)

T

完整时间格式(hh:mm:ss)

f

简短日期/时间格式(YYYY年MM月dd日 hh:mm)

F

完整日期/时间格式(YYYY年MM月dd日 hh:mm:ss)

g

简短的可排序的日期/时间格式(YYYY-MM-dd hh:mm)

G

完整的可排序的日期/时间格式(YYYY-MM-dd hh:mm:ss)

M或m

月/日格式(MM月dd日)

Y或y

年/月格式(YYYY年MM月)

例2.2:

static void Main(string[] args)

{

DateTime dt=DateTime.Now;

string strB=String.Format("{0:D}",dt);//格式化为短日期格式

Console.WriteLine(strB);

Console.ReadLine();

}

运行结果:

2016年4月29日

3.String类的Substring方法,该方法可以截取字符串中指定位置和指定长度的字符。

例2.3:

static voidMain(string[]args)

{

stringStrA="我和你一样的坚强,一样善良";

stringStrB="";

StrB=StrA.Substring(1,4);//1:要截取的字符的开始位置索引;:要截取的字符个数。

Console.WriteLine(StrB);

Console.ReadLine();

}

运行结果:

和你一样

4. String类的Split方法,用于分割字符串,此方法的返回值是包含你所有分割字符串的数组对象,可以通过数组取得所有分割的子字符串。

例2.4:

static voidMain(string[]args)

{

string StrA="*@有星星的夜空,真的很美……";

char[] sep={'@','美'};

String[] sp=newString[100];

sp=StrA.Split(sep);

for(inti=0;i<sp.Length;i++)

{

Console.WriteLine("item{0}:{1}",i,sp[i]);

}

Console.ReadLine();

}

运行结果:

item0:*

item1:有星星的夜空,真的很

item2:.....

5.String类的Insert方法,用于向字符串的任意位置插入新元素。

例2.5:

using System;

using System.Collections.Generic;

using System.Text;

namespace Text

{

class Program

{

static void Main(string[] args)

{

stringStrA="我喜欢";

stringStrB;

StrB=StrA.Insert(3,"你...");

stringStrC = StrB.Insert(7, "喜之郎果冻!!!");

Console.WriteLine(StrC);

Console.ReadLine();

}

}

}

运行结果:

我喜欢你...喜之郎果冻!!!

6. String类提供了PadLeft/PadRight方法用于填充字符串,PadLeft方法在字符串的左侧进行填充,PadRight则在其右侧。

例2.6:

static void Main()

{

stringstr1 = "*在家号吗???*";

string str2 =str1.PadLeft(10,'@');

string str3 = str2.PadRight(11,'#');

Console.WriteLine("补充字符串之前:" + str1);

Console.WriteLine("补充字符串之后:" + str3);

7. String类的Remove方法用于从一个字符串的指定位置开始,删除指定数量得字符。语法如下“

Public String Remove(int startIndex)//删除从指定位置开始到最后的所有字符。

Public String Remove(int startIndex,int count)//从指定位置开始删除指定数目的字符

例2.7:

static voidMain()

{

stringstr1 = "*ni在家吗???*";

stringstr2 = str1.Remove(2);

string str3 =str1.Remove(7, 2);

Console.WriteLine(str2);

Console.WriteLine(str3);

}}运行效果: 结果略

7. String类的Remove方法用于从一个字符串的指定位置开始,删除指定数量得字符。语法如下“

Public String Remove(int startIndex)//删除从指定位置开始到最后的所有字符。

Public String Remove(int startIndex,int count)//从指定位置开始删除指定数目的字符

例2.7:

static voidMain()

{

stringstr1 = "*ni在家吗???*";

stringstr2 = str1.Remove(2);

string str3 =str1.Remove(7, 2);

Console.WriteLine(str2);

Console.WriteLine(str3);

}

8.String类还提供了Copy和Copyto方法,用于将字符串复制到另一个字符串或Char类的数组中。

例2.8:

static voidMain()

{

stringstr1 = "*ni在家吗???*";

char[]str = new char[100];

str1.CopyTo(1,str,0,5);//1:要复制的字符的起始位置;str:目标字符数组;0:指定目标数组中的开始存放位置;5:要复制的字符个数

string str3 = String.Copy(str1);

Console.WriteLine(str);

Console.WriteLine(str3);

}

String 类的利与弊:

String类的对象是不可变的,每次使用String类中的方法时,都要在内存中创建一个新的字符串的对象,这就需要为该新对象分配新的空间。在需要对字符串执行

重复修改时,与创建的String类的对象相关的开销可能会非常昂贵。

StringBuilder类的定义

StringBuilder类有6种不同的构造方法,这里只介绍最常用的一种,当然有兴趣的同学,在课下也可以自己学习其他5的用法,艺多不压身嘛!

其语法格式如下:
public StringBuilder(string value,int n)

! Value: StringBuilder对象引用的字符串。

! n: 设定StringBuilder对象的初始大小。

例:StringBuilder mysb=newStringBuilder(“Hello World!!!”);

//创建一个StringBuilder对象,其初始应用的字符串为“Hello World!!!”

StringBuilder类存在于System.Text命名空间中。

StringBuilder类最常用的几种方法:

方法

说明

Append

将文本或者字符串追加到指定对象的末尾

AppendFormat

自定义变量的格式并将这些值追加到StringBuilder对象的末尾

Insert

将字符串或者对象添加到当前StringBuilder对象中的指定位置

Remove

从当前StringBuilder对象中移除指定数量的自符

Replace

用另一个指定的字符来替换StringBuilder对象内的字符

方法实战:

创建一个控制台程序,声明一个int类型的变量Num,并初始化为1000,然后创建一个StringBuilder类的对象LS ,其初始值为“书到用时方恨少”,初始大小为100,最后使用上面的5中方法分别对StringBuilder类的对象进行操作。

using System;

using System.Collections.Generic;

using System.Text;

class Progam

{

static voidMain(string[]args)

{

int Num= 100;

StringBuilder LS = newStringBuilder("书到用时方恨少!", 100);//实例化一个StringBuilder类,并初始化为“书到用时方恨少”!

LS.Append("&&三味书屋");

Console.WriteLine(LS);//追加字符串到末尾

LS.AppendFormat("{0:C}",Num);//将字符串按指定的格式追加到LS的末尾;

Console.WriteLine(LS);

LS.Insert(0, "书中自有黄金屋,");//“把书中自有黄金屋,”加到LS的头部;

Console.WriteLine(LS);

LS.Remove(10,LS.Length-10);//删除索引值为以后的字符串

Console.WriteLine(LS);

LS.Replace("黄金屋", "颜如玉");//把“黄金屋”替换为“颜如玉”;

Console.WriteLine(LS);

Console.ReadLine();

}

}

String类与StringBuffer类的区别

String的长度是不可变的,StringBuffer的长度是可变的。如果你对字符串中的内容经常进行操作,特别是内容要修改时,那么使用StringBuffer,如果最后需要String,那么使用StringBuffer的toString()方法

使用 StringBuffer 主要就是在性能上的考虑。 String 是一种非常常用的数据类型,但由于 String 是不可变对象,在进行 String 的相关操作的时候会产生许多临时的 String 对象。而 StringBuffer 在操作上是在一个缓冲中进行的,性能当然优越的多。不过,一般作为简单的字符串传递和其它操作,只要不改变字符串内容的操作,用 String 效率会高一些。

String类与StringBuilder类的区别:

String的对象是不可变的,每次使用它的方法时,都要在内存中创建一个新的字符串对象,这就需要为新对象分配新的空间。如果你对字符串中的内容需要执行重复修改时,那么系统的开销可能会很昂贵。如果要修改字符串而不创建新的对象,则使用StringBuilder类,尤其是处理大量文字数据时。这样可以提高效率。例如,当在一个循环中将许多字符串连在一起时,使用StringBuilder类可以提升性能。

实践问题:

1.下面哪个方法不是String类 的方法?

A.append()                                         B.remove()

C.copy()                                                 D.insert()

2.使用哪种类的哪种方法可以将大写字母转换为小写字母?

3. 描述String类与StringBuilder类的区别?

小结:

在本章中,我们主要学习了:

u      String类的使用

u      StringBuilder类的简介

u      StringBuilder类的使用

u      String类与StringBuilder类的区别

英语词汇:

英文             全文                                         中文

Class                            类

Public                               公共的

Static                        静态的

Void                             无返回值的

Main                             主要的(程序入口函数)

String                        字符串

System                        系统

Console                          控制台

Write/WriteLine                      输出/输出且换行

Line                                            行

Append                                         添加

Insert                                         插入

Split                                          分割

Remove                                         移除

Copy                                           复制

Equals                                         等于

Replace                                        替换

Compare                                       比较

Format                                         格式

Substring                                      截取字符串

Reverse                                        倒置

练习项目:

1. 写一个程序,要求 将字符串中的每个字符点到输出。

2. 写一个程序,实现从字符串中分离文件路径,文件名及扩展名的功能。

3. 在应用程序中实现记事本的菜单栏中”编辑”的复制,粘贴,剪切,删除功能.如果

你有兴趣,也可以把剩余的功能也实现。(可以多个人一组)

C#OOP之十五 String类StringBuilder类相关推荐

  1. Inno Setup入门(十五)——Inno Setup类参考(1)

    Inno Setup入门(十五)--Inno Setup类参考(1) nno setup脚本能够支持许多的类,这些类使得安装程序的功能得到很大的加强,通过对这些类的使用,将会创建出许多让人惊奇的安装程 ...

  2. String、StringBuilder类连接字符串操作的时间差异

    最新文章:Virson's Blog 刚刚看到园子里面写了一篇关于Java的<StringBuilder.StringBuffer.String类之间的关系>的文章,自己也想试试看C#的S ...

  3. 重温java中的String,StringBuffer,StringBuilder类

    不论什么一个系统在开发的过程中, 相信都不会缺少对字符串的处理. 在 java 语言中, 用来处理字符串的的类经常使用的有 3 个: String.StringBuffer.StringBuilder ...

  4. [JAVA基础类库] String类 ○ StringBuffer类 ○ StringBuilder类

    引言 字符串就是一连串的字符序列,Java提供了String.StringBuffer和StringBuilder三个类来封装对字符串,并提供了系列方法来操作字符串对象. String类是不可变类的: ...

  5. String、StringBuilder类超详细笔记

    目录 String类 1. String类的声明 2. 创建String字符串对象的四种方式 3. String字符串的不可变性 String字符串不可变的原因 修改字符串内容的两种方式 4. 字符串 ...

  6. JavaSE(二十五)——String与StringBuffer、StringBuilder的区别、创建对象的几种方法、Http和Https的区别

    文章目录 1. String与StringBuffer.StringBuilder的区别 2. Java创建对象的几种方法 3. Http和Https的区别 1. String与StringBuffe ...

  7. JAVA笔记(十五):枚举类、注解、异常

    枚举类Enumeration 1)枚举对应英文(enumeration,简写enum) 2)枚举是一组常量的集合 3)可以理解为:枚举属于一种特殊的类,里面只包含一组 有限的 特定的 对象 1.自定义 ...

  8. 使用“override”声明的成员函数不能重写基类成员_C++日志(三十五)虚基类与其子类的构造函数...

    第三十四篇日志中提到,子类对象调用父类同名的函数时需要使用作用域标识符进行限定,这是在任何继承情况下都可以使用的普适方法. 问题引入: 考虑一种特殊的情况:子类全部或部分的基类(称为中间基类)同是继承 ...

  9. 爪哇国新游记之十五----泛型动态数组类

    import java.lang.reflect.Array;/*** 泛型动态数组类**/ public class DynamicArray<T extends Object>{pri ...

最新文章

  1. c语言课程设计商品销售系统,c语言课程设计商品销售管理系统.pdf
  2. 第二组视频:MySQL复制
  3. linux之sed命令n,N,d,D,p,P,h,H,g,G,x解析
  4. 【转】心目中的编程高手
  5. 【已解决】Win7搭建Python环境:Eclipse + PyDev插件
  6. Java过滤掉map集合中key或value为空的值
  7. fs7宽容度_《如果蜗牛有爱情》,FS7拍出电影级质感!
  8. java的使用条件_Java使用条件语句和循环结构确定控制流
  9. SpringCloud工作笔记057---常用免费数据接口
  10. 深度学习2.0-34.ResNet 与 DenseNet
  11. 拓端tecdat|R语言Gabor滤波进行目标图像纹理特征的提取
  12. android lottie字体json,Android Lottie集成及基本用法
  13. smarty手册 分离php和html
  14. 解决XeLaTex编译后中文出现乱码的问题
  15. 新能源车牌识别技术发展到哪一步了?
  16. 查看服务器的并发访问量以及访问的IP地址
  17. 遗传算法流程概述与简单实例认知
  18. 事关男女的三十二个绝妙比喻——男女关系
  19. TortoiseSVN服务器端下载及使用方法
  20. C9、E9、Z14、五院四系…这些高校联盟,光听名字就觉得很厉害!

热门文章

  1. 善泳者溺:最好並不是最好
  2. 多源数据的融合发展现状与趋势(一)——多源数据介绍
  3. 如何停止胡思乱想,保持专注?
  4. 学java 安卓还是ios开发_非计算机科班出身,有JAVA基础,问学安卓开发还是IOS开发好些?...
  5. 巴黎综合理工大学计算机专业,巴黎综合理工大学
  6. 2022年G2电站锅炉司炉考试题模拟考试题库模拟考试平台操作
  7. 2021-第五空间智能安全大赛-Web-EasyCleanup
  8. 考进中科院计算所:我的经历和体会
  9. 排序算法九:基数排序
  10. 路由器BRAS交换机实用维护操作