C#中常用的字符串函数
1. 函数可变参数
params:关键字
使用方法:
1. static void str(params int[] numbers)
2. static void SayHello(string name, params string[] nickNames)
如果是使用第二种方法,那么使用params修饰的参数必须放在最后一个
2. 函数重载
对应位置上的参数类型不同或者参数个数不同才能构成重载,与返回值无关
3. 字符串
C#中字符串的长度就是我们看到的长度,和C语言不同,不需要考虑‘\0’
C#中字符串有不可变性,字符串一旦声明就不可以再改变。所以只能通过索引来读取指定位置的char,不能对指定位置的char进行修改
如果一定要修改,只能复制一份,用s.ToCharArray()方法等到字符串的char数组,对数组修改后调用string s1=new string(char[])这个构造函数来穿件char数组的字符串
string s1 = "hello";
char[] chars = s1.ToCharArray();
chars[0] = 'a';
string s2 = new string(chars);
Console.WriteLine(s1);//输出结果为“hello”
Console.WriteLine(s2);//输出结果为“aello”
此处涉及到变量名和变量执行的值的区别。字符串的不可变性指的是内存中的字符串不可变,而不是变量不变
4. 字符串常用函数
注意:字符串是不可变的,所以这些函数都不会直接改变字符串的内容,而是把修改后的字符串的值通过函数返回值的形式返回
(1)ToLower():得到字符串的小写形式
(2)ToUpper():得到字符串的大写形式
(3)Trim():去掉字符串两端的空白(不会去掉字符串中的空白)
(4)两个字符串比较的时候“==”是区分大小写的比较
s1.Equals(s2,StringComparison.OrdinalIgnoreCase);这种是不区分大小写的比较
inti=s1.CompareTo(s2);这个是用于两个字符串之间的大小比较,返回值是一个整数
5. 字符串的分隔
(1)string[]Split(paramschar[]separator);将字符串按章指定的分隔符分割为字符串数组
string s1 = "aaa,df.dfdf|dfji ";
string[] strs = s1.Split(',','.','|');
foreach (string item in strs)
{
Console.WriteLine(item);
}
输出结果:
aaa
df
dfdf
dfji
(2)string Split(char[] separator,StringSplitOptions options)将字符串按照指定的char分隔符分割为字符串数组
(options取RemoveEmptyEntires的时候移除结果中的空白字符串)
string s = "aa,bb,cc,,dd,1,2,3";
string []strs=s.Split(new char[]{','},StringSplitOptions.RemoveEmptyEntries);
当然,此处的char[]{','}中的分隔符可以不止一个。
如果是以字符串分割的,那么就用new string[]{“字符串”}
string s = "我是小明我是小天我是小刚";
string[]strs=s.Split(newstring[]{"我是"},StringSplitOptions.RemoveEmptyEntries);
(3)stringReplace(stringoldValue,stringnewValue)将字符串中的出现的oldValue的 地方替换为newValue。比如姓名的替换
string s = "姚明是超级巨星,姚明身高216CM";
s = s.Replace("姚明", "孙悦");
(4)string Substring(int startIndex);取从位置startIndex开始一直到最后
string Substring(int startIndex,int length);取从位置startIndex开始,长度为length的子字符串,如果子字符串的长度不足length,则会报错
string s = "http://www.baidu.com";
string s1 = s.Substring(7);
string s2 = s.Substring(7, 3);
Console.WriteLine(s1);//结果为www.baidu.com
Console.WriteLine(s2);//结果为www
(5)bool Contains(string value)判断字符串中是否含有子串value。
bool StartsWith(string value)判断字符串是否以子串value开头
bool EndWith(string value)判断字符串是否以子串value结束
int IndexOf(string value) 取子串value第一次出现的位置。
(返回子字符串的第一个字符第一次出现的位置。 不存在,则返回-1)
注意:上面的bool和int都是函数的返回值类型,使用方法如下:
string s="1234567889";
bool result=s.Contains("12");
练习1:接收用户输入的字符串,将其中的字符以与输入的相反的顺序输出。“123”→“321”
string s=Console.ReadLine();
for (int i = s.Length - 1; i >= 0; i--)
{
Console.Write(s[i]);
}
练习2:接收用户输入的一句英文,将其中的单词以反序输出。"hello c sharp"→"sharp c hello"
string s=Console.ReadLine();
string[] words = s.Split(' ');
for (int i = words.Length - 1; i >= 0; i--)
{
Console.Write(words[i]+" ");
}
练习3:从Email中提取出用户名和域名:abc@163.com(indexOf找到@的位置,Substring)
第一种方法:
string email=Console.ReadLine();
int atIndex = email.IndexOf('@');
string userName = email.Substring(0, atIndex);
string domainName = email.Substring(atIndex + 1);
Console.WriteLine(userName);
Console.WriteLine(domainName);
第二种方法:
string email=Console.ReadLine();
string[] str = email.Split('@');
string userName = str[0];
string domainName = str[1];
Console.WriteLine(userName);
Console.WriteLine(domainName);
练习4:文本文件中存储了多个文章标题、作者,标题和作者之间用若干空格隔开,每行一个。标题有的长有的短,输出到控制台的时候做多标题长度20,如果超过20,则截取长度17的子串并且在后面添加“...”,加一个竖线后输出作者的名字
string[] lines = System.IO.File.ReadAllLines(@"D:\1.txt",Encoding.Default);
foreach (string line in lines)
{
string[] str = line.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
string title = str[0];
string author = str[1];
title = title.Substring(0, Math.Min(17, title.Length));
if (title.Length==17)
{
title = title + "...";
}
Console.WriteLine("{0}|{1}", title, author);
}
练习5:从ini格式的文件中(每行是"键=值"格式)中读取配置项的值。编写一个函数来读这些文件:读取指定文件的某个配置项的值
static void Main(string[] args)
{
string value = GetConfigValue(@"D:\1.ini", "用户名");
Console.WriteLine(value);
Console.ReadKey();
}
static string GetConfigValue(string fileName, string itemName)
{
string[] lines = System.IO.File.ReadAllLines(fileName, Encoding.Default);
foreach (string line in lines)
{
string[] strs = line.Split('=');
string name = strs[0].Trim();
string value = strs[1].Trim();
if (name==itemName)
{
return value;
}
}
return "错误";
}
ps.最近就要毕业了,想去黑马程序员的.NET班培训,就在复习C#基础,这个是杨中科老师的10版视频中的常用的字符串函数