首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >能否详细讲讲字符串呢?

能否详细讲讲字符串呢?

作者头像
高一峰
修改2020-09-22 14:39:23
3770
修改2020-09-22 14:39:23
举报
文章被收录于专栏:高渡号外高渡号外

能否详细讲讲字符串呢?

—— 新手编程1001问之C#编程基础


好的,那我们今天就聊聊字符串。

字符串,的确是我们最常用的一个基本数据类型。字符串在编程中总是扮演重要的角色。它可以是一个变量的名称,也可以是一个变量的值。今天,我们就重点讨论当它作为一个值的时候的意义。

可能就是因为太常用了,我们的确是很容易忽视它的一些重要特性,所谓熟视无睹,也莫过如此吧。

字符串,顾名思义就是由字符(char,含数字)构成的一个序列。

我们对这个概念的理解的确需要稍微深入一点。不能停留在它就是几个字母或数字拼接起来的一串字符的这个层面。这是不够的,因为,它的很多特性,就是建立在它的深层含义基础之上的。

如何加深理解?

分两个层面:

其一,它是由字符(char,含数字)构成的。

其二,它是一个序列。

如何理解它是由字符(char,含数字)构成的?我们知道字符(char)是值类型的,每一个字符的值就是它本身字面上的含义。这个在很多计算机语言中把它称之为字面量。所以,构成字符串的字符是独立的、不可再分的个体,且每一个独立个体都是一个值类型的对象,它的值就是它本身。认识到这一点,很重要。因为只有这样,当你需要拼接或者拆分一个字符串的时候,你心里才清楚它们究竟是由什么东西又是如何构成的?为什么可以拼接或者切割?

其次,如何理解它是一个序列?这个问题同样重要。知道它是一个序列,就不会把它看成一个独立不可分的个体。而且,既然是序列,就有序列号,也就是顺序号,甚至你会联想到排序的概念。当然,我们也要因此特别注意,不要跟其他的序列型对象混淆,比如数组、比如列表等等,都是序列类型的对象,它们经过排序以后,我们认为它还是这个数组或者列表对象。但是,字符串如果经过任何顺序重排,它就不再是原来的那个字符串了。所以,在序列这个含义上,我们需要深入详细的去甄别它们的差异,不能完全混淆其中的内涵。

好了,建立了这两个层次的认知,对于接下来我们给出的对字符串的更多的描述或操作,你就不会觉得奇怪了。

还是以C#对字符串的定义和描述为例,通常是下面这样的:

类型:引用类型

类型名:string

运算:支持字符串的拼接运算,如:'a' + 'b' == 'ab'

长度:'abc',长度len等于3

索引:0 — (len-1)

方法:

常用内置函数:Length()、Substring()、IndexOf()

解读一下上面的这段描述:

(1)字符串是引用类型。这个应该比较好理解,一方面你可以理解为语言就是这么定义的。另一方面,你知道字符串是由若干字符(char)构成的,也就是由若干独立的值类型对象构成的,它似乎也只能是引用类型比较合适。

(2)类型名string。这个还真就是定义了,知道并且会用行了。注意首字母也是小写的。

(3)支持拼接运算。它本来就是由若干独立的字符拼接而成的,再多拼接一次也无妨,对吧?所以,从这个层面理解和掌握字符串的“加法”运算,你还会忘记吗?除非你一次都没尝试过。

(4)字符串是有长度的。没错,每一个独立的字符之所以认为它是独立的,就是因为它是一个有边界的个体,不能多,也不能少。所以,若干个这样“有边界”独立个体拼接在一起,边界是不是就累积起来了,长度当然就会有了。所以,字符串的长度就是字符串的个数,这个极其简单的事情,其实也是有原因的。

(5)字符串的索引编号从0到len-1。既然字符串是一个序列,就一定会有序列编号,也就是所谓的索引编号,这也是必然的。这个索引其实非常重要,但凡我们要操作一个字符串,几乎都会用到它的索引。

(6)所以,有了三个常用内置函数。一个用于获取长度,一个用于截取一个子串,一个用于找到可能存在于其中的某个子串或字符的位置值。

为了加深印象,下面我们分别介绍一下这三个内置函数的使用方法。

1、函数:Length()

用途:函数Length(),它能够获取一个指定字符串的长度。

方法:mystr.Length()

例如:

string x = 'abcde';
int len = x.Length();    // len的结果等于5

2、函数:Substring()

用途:函数Substring(a,b),它能够通过截取获得一个新的字符串。参数a表示截取开始的索引位置,b表示截取的长度。当b不存在时,表示截取到末尾。

方法:mystr.Substring(a,b)

例如:

string x = 'abcdef';
String x1 = x.Substring(1,4);    // x1的结果等于'bcde'
String x2 = x.Substring(3);       // x2的结果等于def

3、函数:IndexOf()

用途:函数IndexOf(a),返回指定字符串在该实例中第一次出现的索引(位置值),索引从 0 开始。

方法:mystr.IndexOf(a)

例如:

string x = 'abcde';
string a = 'cd';
string b = '123';
int index1 = x.IndexOf(a);    // index的结果等于2
int index2 = x.IndexOf(b);    // index的结果等于-1

除了以上常用函数,以下列举的也是一些常用的字符串操作函数:

mystr.Contains( teststr ) :判断一个指定字符串对象是否出现在该字符串中,返回true或false。请注意它与IndexOf()的差别。

IsNullOrEmpty( mystr):指示指定的字符串是否为 null 或者是否为一个空的字符串,返回true或false。

mystr.Remove( startIndex, count ) :从当前字符串的指定位置开始移除指定数量的字符,并返回一个新的字符串。

mystr.Replace( oldValue, newValue ) :把当前字符串对象中,所有指定的字符串替换为另一个指定的字符串,并返回新的字符串。

mystr.ToLower():把字符串转换为小写,并返回。

mystr.ToUpper():把字符串转换为大写,并返回。

mystr.Trim():移除当前字符串对象中的所有前导空白字符和后置空白字符,返回一个前后都没有空白字符的字符串。

一般来说,你可以不用死记硬背这些方法,但你必须知道:有这些方法!这样,当你需要的时候你才会想到它们。当然,如果你对字符串不甚了了,那很可能需要的时候,你根本想不起来,它还可以这样操作。相反,如果你已经有了如上述的对字符串的比较深入的认知,那么了解和掌握这些函数方法,就是一件非常轻松的事情。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-08-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 高渡号外 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 能否详细讲讲字符串呢?
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档