字符串本质上是char数组。
字符串每次重新赋值或者拼接时会分配新的内存。
如果字符串经常改变会非常浪费空间。
- 字符串指定位置获取
string str = "溜溜是六六";
Console.WriteLine(str[2]);
char[] chars = str.ToCharArray();
Console.WriteLine(chars[1]);
- 字符串拼接
string str0 = string.Format("{0}{1}", 1124, 324);
Console.WriteLine(str0);
- 正向查找字符串
int index = str.IndexOf('是');
Console.WriteLine(index);
- 反向查找字符串
index = str.LastIndexOf('六');
Console.WriteLine(index);
- 移除指定位置后的字符
str0 = str.Remove(2);
Console.WriteLine(str0);
//参数1移除开始位置;参数2移除个数;
str0 = str.Remove(1,2);
Console.WriteLine(str0);
- 替换指定字符串
str0 = str.Replace('六', '6');
Console.WriteLine(str0);
str0 = str.Replace("六","6");
Console.WriteLine(str0);
- 大小写转换
str = "sgfsg erarg";
str0 = str.ToUpper();
Console.WriteLine(str0);
str0 = str0.ToLower();
Console.WriteLine(str0);
- 字符串截取,截取从指定位置开始之后的字符串
str0 = str.Substring(5);
Console.WriteLine(str0);
//参数1移除开始位置;参数2截取个数;
str0 = str.Substring(2,3);
Console.WriteLine(str0);
- 字符串切割
实际开发中,策划会使用配表的形式做一些功能。这时,需要用字符串切割的方法把数据截取出来。
str = "1,2,3,4,5,6,7,8,9";
string[] strs = str.Split(',');
for (int i = 0; i < strs.Length; i++)
{
Console.WriteLine(strs[i]);
}
实例:
namespace L23_面向对象相关_string
{
internal class Program
{
static void Main(string[] args)
{
//练习题一
//请写出string中提供的截取和替换对应的函数名
//Substring Replace
//练习题二
//请将字符串1|2|3|4|5|6|7
//变为 2|3|4|5|6|7|8
//并输出
//(使用字符串切割的方法)
string s = "1|2|3|4|5|6|7";
//用字符串增删的方法实现
//s = s + "|8";
//s = s.Substring(2);
//Console.Write(s);
//使用字符串切割的方法
string[] ss = s.Split("|");
int[] temp = new int[ss.Length];
for (int i = 0; i < ss.Length; i++)
{
//将切割出来的字符串每个字符变成int类型进行算数+1
temp[i] = int.Parse(ss[i]) + 1;
//将算数运算完的数组重新改回字符串数组,然后按照规律加|
ss[i] = Convert.ToString(temp[i]) + "|";
}
//将最后一个字符串数组的元素中多的|删掉
ss[ss.Length - 1] = ss[ss.Length - 1].Remove(1);
//打印
for (int i = 0; i < ss.Length; i++)
{
Console.Write(ss[i]);
}
//练习题二:
//String和string、Int32和int、Int16和short、Int64和long的区别是什么?
//String:即System.String,调用静态方法时用String;
//string:System.String的别名,定义变量时使用string。
//int是System.Int32在C#语言中的特别名称,即别名,System.Int32是.Net Framework平台中统一的写法。
//同理,Int16和short,Int64和long也是这样。
//练习题三:
string st = null;
st = "123";
string st2 = st;
st2 = "321";
st2 += "123";
//请问,上面这段代码,分配了多少个新的堆内存?
//三个。string类型的值一样时,CLR会到驻留池(Intern Pool)中去检查是否有值为相同的字符串,
//如果已经存在就不重新分配堆空间,而是共同引用这个string;
//但当string每进行一次改变时就会返回一个新的string对象。
//练习题四:??
//编写一个函数,将输入的字符串反转,不能中间使用中间商,你必须原地修改数组。交换过程中不使用额外空间,
//比如输入{'h','e','l','l','o'}
//输出{'o','l','l','e','h'}
;
// Array.Reverse function
//string ReverseB(string text)
//{
// char[] charArray = text.ToCharArray();
// Array.Reverse(charArray);
// return new string(charArray);
//}
string Fun(string str00)
{
//str00.ToCharArray()将字符串转化成char数组
//.Reverse<char>()将字符串数组顺序倒转
//new string()将改变后的char数组重新变回字符串
return new string (str00.ToCharArray().Reverse<char>().ToArray());
}
Console.WriteLine(Fun("hello"));
}
}
}