c#——字符串及字符串常用函数
一、字符串的不可变性
(1)字符(char)和字符串(string)的区别(如例1)。
例1:
namespace 字符串1
{
class Program
{
static void Main(string[] args)
{
//1个char有且只能有一个字符(不可以为空)。
char c1='a';
char c2='b';
//1个字符串可以有1个字符,可以有很多个字符组成的,还可以为空。
string s1 = "";
string s2 = "a";
string s3="abcd";
}
}
}
使用s.length属性来获得字符串中的字符个数。
char c=s[1]通过索引来只读指写位置的char(如例2)。
例2:
namespace 字符串1
{
class Program
{
static void Main(string[] args)
{
//遍历字符串中的每一个无素
string s = "hello";
Console.WriteLine(s.Length); //5, s.Length获取字符串的字符个数
Console.WriteLine(s[1]); //e, s[i]通过索引读取指写位置的字符char
char c3 = s[4]; //string可以看做是char的只读数组
Console.WriteLine(c3); //o
for (int i = 0; i < s.Length; i++) //遍历字符串s中的每一个字符(从前向后)
{
char c = s[i];
Console.WriteLine(c);
}
for (int i = s.Length - 1; i >= 0; i--) //遍历字符串s中的每一个字符(从后向前)
{
Console.WriteLine(s[i]);
}
//s[0] = 'y'; //不能赋值(只能读,不能写)
Console.ReadKey();
}
}
}
例3:将字符串中的h替换为a
namespace 字符串2
{
class Program
{
static void Main(string[] args)
{
//将字符串中的h替换为a
string s1 = "hello";
char[] chars = s1.ToCharArray(); //用s.ToCharArray()方法得到字符串的char数组
chars[0]='a'; //对char数组进行修改
string s2=new string(chars); //调用new string(char[])这个构造函数来创建char数组的字符串
Console.WriteLine(s1); //hello,改变chars并不会改变s1,因为chars是一份拷贝(体现了字符串的一重要特性:不可变性)。
Console.WriteLine(s2); //aello
Console.ReadKey();
}
}
}
c#中字符 串有一重要的特性:不可变性,字符串一旦声明就不再可以改变。
如果要对char进行修改,那么就必须创建一个新的字符串,用s,ToCharArray()方法得到字符串的char数组,对数组进行修改后,调用new string(char[])这个构造函数来创建char数组的字符串。
(2)变量名和变量指向的值的区别:
字符串不可变性指的是内存中的字符串不可变,而不是变量不变。(如例4,例5)
例4:
namespace 字符串2
{
class Program
{
static void Main(string[] args)
{
string s1 = "hello";
Console.WriteLine(s1);
s1 = "yello";
Console.WriteLine(s1);
Console.ReadKey();
}
}
}
例5:
namespace 字符串3
{
class Program
{
static void Main(string[] args)
{
string s1 = "hello";
string s10 = s1; //s10指向s1指向的字符串,而不是s10指向s1,哪怕s1以后指向了其它内存,那么s10还是指向"hello"
char[] chars = s1.ToCharArray();
chars[0] = 'a';
s1 = new string(chars);
Console.WriteLine(s1); //aello
Console.WriteLine(s10); //hello, 过河拆桥,和s1的改变没有任何的关系
Console.ReadKey();
}
}
}
二、字符串类常用函数:
字符串的常用函数:
ToLower():得到字符串的小写形式
ToUpper():得到字符串的大写形式
s1.Equals(s2, StringComparison.OrdinalIgnoreCase),两字符串进行比较,忽略大小写的比较。
例6:
namespace 字符串4
{
class Program
{
static void Main(string[] args)
{
#region 将字符串"Hello"中所有字符全部转化为小写、大写
string s1 = "Hello";
/*
string s2 = s1.ToLower();
Console.WriteLine(s1); //Hello
Console.WriteLine(s2); //hello
*/
s1 = s1.ToLower();//并不是改变了字符串的内容,而是生成一个新的全部变为小写的字符串,然后用s1指向这个新的字符串
Console.WriteLine(s1); //hello
Console.WriteLine(s1.ToUpper()); //HELLO
#endregion
#region 去掉字符串" a b "两端的空格
string s3 = " a b ";
/*
string s4 = s3.Trim();
Console.WriteLine("|{0}|",s3); //| a b |
Console.WriteLine("|{0}|",s4); //|a b|
*/
s3 = s3.Trim();
Console.WriteLine("|{0}|", s3); //|a b|
#endregion
/*
bool b = ("abc" == "ABC");
Console.WriteLine(b); //False
*/
#region 忽略大小写的比较
//Ignore忽略,Case大小写
//==是区分大小写的比较,Equals("ABC", StringComparison.OrdinalIgnoreCase)是忽略大小写的比较
bool b = "abc".Equals("ABC", StringComparison.OrdinalIgnoreCase);
Console.WriteLine(b);
#endregion
Console.ReadKey();
}
}
}
三、字符串的分割
字符串的分割 详解如上图,实例如例7
例7:
namespace 字符串5
{
class Program
{
static void Main(string[] args)
{
#region 按指定的分割符分割字符串数组
string s1 = "aaa,bbb,ccc,ddd.hello|yes,no";
string[] strs = s1.Split(',','.','|'); //可按多个分割符进行拆分
foreach (string item1 in strs)
{
Console.WriteLine(item1);
}
#endregion
#region 移除空白字符串
/*
string s2 = "aaa,bb,cc,,12,3";
string[] strs2 = s2.Split(',');
foreach (string item2 in strs2)
{
Console.WriteLine(item2);
}
*/
string s2 = "aaa,bb,cc,,12,3";
string[] strs2 = s2.Split(new char[]{','},StringSplitOptions.RemoveEmptyEntries);
foreach (string item2 in strs2)
{
Console.WriteLine(item2);
}
#endregion
#region 按照1个字符串来进行分割的方法
string s3 = "我是刘海燕我是马兆娟我是蒋倩兰";
string[] str3 = s3.Split(new string[] { "我是" }, StringSplitOptions.RemoveEmptyEntries);
foreach (string item3 in str3)
{
Console.WriteLine(item3);
}
#endregion
Console.ReadKey();
}
}
}
string[] lines = System.IO.File.ReadAllLines(@"C:\root.ini", Encoding.Default);从文本文件中读取数据,返回值为string类组,每个元素为一行(如例8)。
例8:从文本文件1.txt中读取数据(1.txt的存储路径为:F:\其它文档\总结\传智博客.net培训 实例练习\1.txt)
namespace 字符串5
{
class Program
{
static void Main(string[] args)
{
//从文本文件1.txt中读取数据
string[] lines = System.IO.File.ReadAllLines(@"F:\其它文档\总结\传智博客.net培训 实例练习\1.txt", Encoding.Default);
foreach (string item in lines)
{
Console.WriteLine(item);
}
Console.ReadKey();
}
}
}
字符串函数
字符串替换:string Replace(string oldValue,string newValue)
例9:名字替换:将李时珍替换为李素丽
namespace Replace函数
{
class Program
{
static void Main(string[] args)
{
//名字替换(将李时珍替换为李素丽)
string s = "李时珍是一个好同志,李时珍是一个好医生,向李时珍学习!";
s = s.Replace("李时珍","李素丽");
Console.WriteLine(s);
Console.ReadKey();
}
}
}
例10:SubString函数:取子字符串
namespace SubString函数
{
class Program
{
static void Main(string[] args)
{
//SubString()1个参数的重载函数
string s = "http://www.baidu.com";
string 域名 = s.Substring(7); //从指定的序号开始一直到最后的子字符串
Console.WriteLine(域名);
//SubString()2个参数的重载函数
string s1 = s.Substring(7,5); //SubString第二个参数指的是截取多长,而不是结束位置
Console.WriteLine(s1);
//string s2 = s.Substring(7, 100); //如果Length参数超过了长度,就会报错
//Console.WriteLine(s2);
Console.ReadKey();
}
}
}
例11:Contains函数:判断字符串中是否含有子字符串value
namespace Contains函数
{
class Program
{
static void Main(string[] args)
{
string s = "我们的社会真和谐啊!";
if (s.Contains("社会") || s.Contains("和谐"))
{
Console.WriteLine("含有敏感词汇,请文明用语!");
}
Console.ReadKey();
}
}
}
例12:s.StartsWith 判断字符串是否以子串value开始,s.EndsWiths 判断字符串是否以子串value结束
namespace StartsWith函数
{
class Program
{
static void Main(string[] args)
{
string s = "http://www.cctv.com";
//s.StartsWith 判断字符串是否以子串value开始
if (s.StartsWith("http://") || s.StartsWith("https://"))
{
Console.WriteLine("是网址");
}
else
{
Console.WriteLine("不是网址");
}
//s.EndsWiths 判断字符串是否以子串value结束
if (s.EndsWith("www.baidu.com"))
{
Console.WriteLine("是百度");
}
else
{
Console.WriteLine("不是百度");
}
Console.ReadKey();
}
}
}
例13:IndexOf函数:取子串value第一次出现的位置,如果不存在,则返回-1。
namespace IndexOf函数
{
class Program
{
static void Main(string[] args)
{
//IndexOf函数,取子串第一次出现的位置,如果不存在,则返回-1。
string s = "您好,我是刘海燕";
int i1 = s.IndexOf("我是"); //返回子字符串的第一个字符第一次出现的位置
int i2 = s.IndexOf("你是"); //如果不存在,则返回-1
Console.WriteLine(i1); //3,子串“我是”第一次出现的位置是3
Console.WriteLine(i2); //-1,子串不存在“你是”,返回-1
Console.ReadKey();
}
}
}