字符、字符串和文本的处理之String类型

.Net Framework中处理字符和字符串的主要有以下这么几个类:

(1)、System.Char类 一基础字符串处理类

(2)、System.String类 一处理不可变的字符串(一经创建,字符串便不能以任何方式修改)

(3)、System.Text.StringBuilder类 一更高效地构建字符串

(4)、System.Secureity.SecureString类 一对字符串进行保护操作,它可以保护密码和信用卡资料等敏感字符串.

一、String类型

1、简介

在任何应用程序里面,String类型都是用的最多的类型之一.一个String代表一个不可变的(immutable)的顺序字符串,String类型直接派生自Object,所以它是应用类型.所以String对象(它的字符串数组)总是存在于堆上,永远不会跑到线程栈.

C#将String视为基元类型,C#编译器允许在源代码中直接使用字面值字符串.编译器将这些字符串存放到模块的元数据中,并在运行时加载和引用它们.

C#不允许使用new操作符从字面值字符串构造String对象,代码如下:

相反,必须使用以下简化语法:

编译代码并检查IL(使用ILDasm.exe),会看到以下内容:

用于构造对象新实例,但上述代码中并没有出现newobj指令,有一个特殊的ldstr(即 load string)指令,它使用从元数据获得的字面值(literal)字符串构造String对象.这证明CLR实际是用一种特殊方式构造字面值String对象

如果使用不安全的(unsafe)代码,可以从一个Char*或Sbyte*参数构造一个String.这时要使用C#的new操作符,并调用由String类型提供的、能接受Char*或Sbyte*参数的某个构造器.这些构造器将创建String对象,根据由Char实例或有符号(signed)字节构成的一个数组来初始化字符串。其他构造器则不允许接受任何指针参数,用任何托管编程语言写的安全(可验证)代码都能调用它们.

2、关于特殊字符的处理:

C#提供了一些特殊的语法来帮助开发人员在源代码中输入字面值(literal)字符串,对于换行符、回车符和退格符这样的特殊字符,C#采用的是C/C++开发人员熟悉的转移机制,代码如下:

//包含回车符和换行符的字符串
string s="Hi\r\nthere.";

3、关于字符串连接的问题

string s="Hi"+" "+"there .";

在上述代码中,由于所有字符串都是字面值,所以C#编译器能在编译时连接它们,最终将一个字符串即(即"Hi there.")放到模块的元数据中.对非字面值字符串使用+操作符,连接则在运行时进行.运行时连接不要用+操作符,因为这样会在堆上创建多个字符串对象,而堆是需要垃圾回收的,对性能有影响.相反,应该使用StringBuilder类型.

4、字符串@转义符

C#提供了一种特殊的字符串声明方式.采取这种方式,印号之间的所有字符都会被视为字符串的一部分.这种特殊声明称为"逐字字符串",通常用于指定文件或目录的路径,或者与正则表达式配合使用。以下代码展示了如何使用和不适用逐字字符串字符(@)来申明同一个字符串,代码如下:

//指定应用程序路径,使用\解析‘\‘
string file="C:\\Windows\\System32\\Notpad.exe";

//使用逐字字符串制定应用程序路径
string file=@"C:\Windows\System32\Notepad.exe";

两种写法生成完全一样的字符串,但后者的可读性更好.

原文地址:https://www.cnblogs.com/GreenLeaves/p/9034148.html

时间: 2024-10-10 10:11:59

字符、字符串和文本的处理之String类型的相关文章

第14章 字符、字符串和文本处理

14.1字符 在.Net Framework中,字符总是表示成16位Unicode代码值,这简化了国际化应用程序的开发. 每个字符都表示成System.Char结构的一个实例. 针对Char的一个实例,可以调用静态GetUnicodeCategory方法,这个方法返回的是System.Globalization.UnicodeCategory枚举类型的一个值. Char类型提供了几个静态方法,比如IsDigit,IsUpper等.注意,所有这些方法要么获取单个字符作为参数,要么获取一个Strin

《Python CookBook2》 第一章 文本 - 过滤字符串中不属于指定集合的字符 && 检查一个字符串是文本还是二进制

过滤字符串中不属于指定集合的字符 任务: 给定一个需要保留的字符串的集合,构建一个过滤函数,并可将其应用于任何字符串s,函数返回一个s的拷贝,该拷贝只包含指定字符集合中的元素. 解决方案: import string allchars = string.maketrans('','') #all chars table def makefilter(keep): delchars = allchars.translate(allchars,keep) def thefilter(s): retu

第十四章 字符、字符串和文本处理

1. 概述 本章解释在 MS.Net Framework 中处理单独的字符和字符串的机制.包括 System.Char结构.System.String类.System.Text.StringBuilder类以及System.Security.SecureString类. 2. 名词解释 3. 主要内容 3.1 字符 实现各种数值类型与Char实例的相互转换的三种技术: ① 转型(强制类型转换).(效率最高) ② 使用 Convert 类型. ③ 使用 IConvertible 接口.(需要装箱,

【C#进阶系列】13 字符、字符串和文本编码

本来写了蛮多的,结果因为重启了一下机器导致写的东西都没了. 然后再回想之前写了什么,反而更像是把知识提炼了一番. 关于字符 字符什么的只要记住.net里面都用的Unicode编码就好.字符和数字之间转换用强制转换是最简单且高效的, 字符串是引用类型,存在与堆上,然而同一般的对象用newobj这个IL指令创建不同,字符串由ldstr指令创建.(load string) 关于字符串 字符串是不可变的,所有的String的方法都是创建一个新的字符串. 用+号去拼接字符串,会在堆上创建多个string对

《好学的C++ 第2版》 第5章 字符串--分析文本

文本字符串存储:每个字符加上一个'\0'的ascii码.所以一个文本字符串也就是一连串字节,每个字节是0~255的一个数值.键盘输入或屏幕输出时,会发生数值跟字符之间的转换.(国际标准unicode编码使用了一个以上的字节 来表示每个字符.) 由于源代码保存在文本文件里,而文本字符是以数值形式存储的.因此计算机来处理源代码时,处理的其实就是这些连串的数值,按照另一套精确的规则进行另一种形式的数值运算.数据求值和决策判断.(!!!最开始的第一版编译器只能用机器码来编写!!!而老编译器又可以用来编写

中英文字符大小和文本边界问题

中英文字符大小和文本边界问题 也不知道是楼主的问题还是CSDN的问题,楼主最近的博客在贴代码的时候出现了问题,明明把代码贴进去了,还是没有代码的效果,好吧.先这样吧,过几天再看看到底是啥情况. ASCII,UTF-8,Unicode编码下的中英文字符大小 当对字符串进行发送和接受时,编码方式很关键,服务端与客户单显然要采用相同的编码方式才行,否则一方的到的就是乱码.演示一下,看一下常见的编码格式下中英文字符的写法: using System; using System.Collections.G

javascript类型系统——字符串String类型

× 目录 [1]定义 [2]引号 [3]反斜线[4]特点[5]转字符串[6]长度属性[7]实例方法 前面的话 javascript没有表示单个字符的字符型,只有字符串String类型,字符型相当于仅包含一个字符的字符串 字符串String是javascript基本数据类型,同时javascript也支持String对象,它是一个原始值的包装对象.在需要时,javascript会自动在原始形式和对象形式之间转换.本文将介绍字符串String原始类型及String包装对象 定义 字符串String类

一个新手的Python自学之旅 #MacBook #《“笨办法”学Python》#第七章:字符串、文本、各种打印、转义序列、手动输入raw_input()

第七章预告:字符串.文本.各种打印.转义序列.手动输入raw_input() ------------------------------------<习题6:字符串和文本>--------------------------------------- 在这里还时有必要详细介绍一下字符串以及和格式化字符之间的应用: 字符串:通常是指需要展示给别人的或者是想要从程序里“导出”的一小段字符,吧啦吧啦吧啦吧啦,是不是觉得挺拗口的,不如举个例子来的实在. 在ex1.py的这段代码print "

从String类型字符串的比较到StringBuffer和StringBuilder

1. String类型 String类源码 为了从本质上理解String类型的特性所在,我们从String类型的源码看起,在源码中String类的注释中存在以下: /**Strings are constant; their values cannot be changed after they * are created. String buffers support mutable strings. * Because String objects are immutable they ca