本帖最后由 da11 于 2020-12-30 23:11 编辑
//字符串特性讲解主Main
/*
* · 字符串常量具备字符串池特性
* - 字符串常量在创建前,首先在字符串池中查找是否存在相同文本。
* 如果存在,则直接返回该对象引用;如果不存在,则开辟空间存储。
* - 目的:提高内存利用率。
* · 字符串具有不可变性
* - 字符串常量一旦进入内存,就不得再次改变,因为如果在原位置改变会
* 使其他对象内存被破坏,导致内存泄漏。当遇到字符串变量引用新值时,
* 会在内存中新建一个字符串,将该字符串地址交由该变量引用。
*
*
*/
private static void Main()
{
string s1 = "dza";
string s2 = "dza";
//判定两个对象的引用地址是否相等的方法
bool bo1 = object.ReferenceEquals(s1, s2); //结果为true
//object 引用类型,每次重新赋值修改,都是开辟新的堆区空间,修改的是栈区的引用
//详看字符串池的字符串具有不可变性讲解!
object o1 = 1;
o1 = 2.0;
o1 = "3";
o1 = true;
string S3 = "";
for (int i = 0; i < 10; i++)
{
//循环没执行一次就会产生一个垃圾,此方法拼接字符串太占内存
S3 = S3 + i.ToString();
}
Console.WriteLine(S3);
//可变字符串:一次开辟可以容纳10个字符大小的空间
//优点:可以在原有空间修改字符串,避免产生垃圾
//适用性:频繁对字符串操作(增加、替换、移除)
//此方法为字符串可变方法,循环拼接的时候字符串字节小于方法设定内,则不会产生垃圾,方法实参(设定开辟空间字符串大小)可以不填,则是默认值
StringBuilder S4 = new StringBuilder(10);
for (int i = 0; i < 10; i++)
{
S4.Append(i);
}
S4.Append("dsdsdas"); //如果增加字符串时超过了设定的字符串字节大小值,此方法则会创建一个更大的字符串空间,原有的字符串空间则成为垃圾
//所以使用此方法前尽量预估准确此数值
Console.WriteLine(S4);
Console.ReadLine();
}
//以下为字符串特性方法的自学
//ToArray方法,将字符串变为数组,数组的类型为char,数组无论定义多大,他都会根据字符串的长度改变数组长度
//如定义数组长度为1时,字符串为10,则数组的长度改为10
char[] charSZ=new char[1];
charSZ= S3.ToArray();
foreach (char item in charSZ)
{
Console.WriteLine(item);
}
string S5 = "Dza Hello And My Love XM";
//ToLower方法,将字符串中,所有的大写字母转换为小写,需要字符串类型接收
string S6 = S5.ToLower();
Console.WriteLine(S6);
//ToUpper方法,将字符串中,所有的小写字母转换为大写,需要字符串类型接收
S6=S5.ToUpper();
Console.WriteLine(S6);
//Substring方法,将指定的字符串索引位置复制给一个新的字符串
S6=S5.Substring(0,5);
Console.WriteLine(S6);
//Trim方法,将字符串的首个字符前和末尾字符后的空格删除
S6=S5.Trim();
Console.WriteLine(S6);
//Split方法,将字符串中每个分割符分割的子字符串放入string类型的数组中,需要字符串数组类型接收
string[] StrSZ = S5.Split();
foreach (var item in StrSZ)
{
Console.WriteLine(item);
}
//join方法,将一个字符串的数组,按照指定的分隔符分隔
S6 = String.Join("-",StrSZ);
Console.WriteLine(S6);
Console.ReadLine();
}
//字符串练习主Main
private static void Main()
{
//1.单词反转 How are you --> you are How
string S1 = "How are you";
//使用Split方法,将字符串中每个分割符分割的子字符串放入string类型的数组中,需要字符串数组类型接收
string[] StrSZ = S1.Split();
Console.WriteLine(StrSZ.Length);
//新建一个字符串类型数组用作后续操作
string[] StrSz2 = new string[StrSZ.Length];
int Count1=0;//计数器
for (int i = StrSZ.Length-1; i >= 0; i--)
{
//倒序装入新的字符串数组
StrSz2[Count1] = StrSZ;
Count1 += 1;
}
//使用join方法,将一个字符串的数组,按照指定的分隔符分隔
string S2 = string.Join(" ", StrSz2);
Console.WriteLine(S2);
//2.字符反转 How are you --> uoy era woH
char[] char1 = new char[1];
//使用ToArray方法,将字符串元素变为数组
char1= S1.ToArray();
char[] char2 = new char[char1.Length];
Count1 = 0;
for (int i = char1.Length - 1; i >= 0; i--)
{
//倒序装入新的字符串数组
char2[Count1] = char1;
Count1 += 1;
}
foreach (var item in char2)
{
Console.Write(item);
}
Console.WriteLine();
//3.查找指定字符串中,不重复出现的字符
string S3 = "dddzamsasyjhtxom";
char[] char3 =new char[10];
char[] char4 = new char[char3.Length];
//使用ToArray方法,将字符串元素变为数组
char3 = S3.ToArray();
int int1;
//去除重复的字符for嵌套循环
for (int WC = 0; WC < char3.Length; WC++)
{
for (int NC = 0; NC < char3.Length; NC++)
{
if (WC==NC)
{
continue;
}
else
{
if (char3[WC] == char3[NC])
{
char3[NC] = '-';
}
}
}
}
string S4=" ";
string S5;
int Count2=0;
//将不重复的字符收集成一个新的字符串
for (int i = 0; i < char3.Length;i++)
{
if (char3 == '-')
{
continue;
}
S5 = char3.ToString();
S4 = S4.Insert(Count2, S5);
Count2++;
}
Console.WriteLine(S4);
//foreach (var item in char3)
//{
// Console.Write(item);
//}
Console.ReadLine();
}
|