ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

C#:字符串的不可变性、以及数据的储存、字符串的比较、字符串的分割截取

2022-09-14 19:01:22  阅读:304  来源: 互联网

标签:Console string WriteLine C# str 字符串 using 可变性


在程序编写的工程中,需要消耗内存,需要进行数据的储存,在定义变量的时候,将会在内存中开辟储存空间,不同的类型的变量所储存的地方是不同的,这里主要分析的是两种变量,一种是引用类型的变量,另一种是值类型的变量,该两种变量被储存的地址是不同的,引用类型的变量主要包括: 字符串类型、自定义类,值类型的变量主要包括:int 、double、decimal、struct、enum、char类型。对于引用类型的变量主要储存在堆中、值类型的变量主要储存在栈中,(栈中的数据遵行的是先入后出的循序)

代码:

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace _04字符串的不可变性

{class Program

{
static void Main(string[] args)
{
//1.字符串具有不可变性,虽然s1、s2是不同的变量,但是他们指向的堆中地址是相同的,栈中的地址不同
//2.调试方式,使用调试-》窗口-》即时,可以进行调试
//3.字符串是引用变量,将内容储存再堆中的,栈中储存的是堆中的地址
//4.字符串的不可变性:当字符串变量被重新弄赋值的时候,将会在堆中开辟新的空间,储存新的变量原来的变量将会作为垃圾处理,使用是GC,否则将会出现内存泄露的情况。
string s1 = "张三";
string s2 = "张三";
//字符串可以看作是一个只读的char类型的数组
string s3 = "abcdefg";
Console.WriteLine(s3[0]);
// s3[0] = 'b'; 这样的方式对字符串进行改变是不行的,因为字符串只能看作可读的字符数组
//可以将字符串转化成为真正的字符数组
char[] chs=s3.ToCharArray(); //将字符串转化称为一个char类型的数组
chs[0]= 'b';
// 再将char类型的数组转换成为新的字符串
s3= new string(chs); //通过函数将字符类型的数组转换成为字符串,重新赋值给s3字符串变量,同时在堆中开辟了新的空间,这里的s3所指向的堆中的地址已经发生了改变,不再是储存abcdefg的地址
Console.WriteLine(s3[0]);
StringBuilder sb = new StringBuilder(); //在进行字符串的累加的时候,没有重新的开辟新的空间,这样大量的节约了时间,需要注意的是空间的开辟是需要栈中时间的,在进行大量的空间的开辟的时候,可能将会导致程序的”卡顿现象“
Stopwatch sw = new Stopwatch(); //创建计时对象
sw.Start();//开始计时
for (int i = 0; i <1000; i++){
sb.Append(i); 
sw.Stop(); //停止计时
Console.WriteLine(sw.Elapsed); //打印记录的时间的长度
string str = sb.ToString(); //将其转化成为字符串
Console.WriteLine(str);
Console.ReadKey();
}
}
}

运行结果:

 

字符串之间的比较:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _05字符串的处理
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("请输入你喜欢的课程");
string lessonOne = Console.ReadLine();
Console.WriteLine("请输入你喜欢的课程");
string lessonTow = Console.ReadLine();
Console.WriteLine("第一个课程的长度:{0},第二个课程的长度:{1}", lessonOne.Length, lessonTow.Length);
#region 字符串比较的第一种方式
//if (lessonOne == lessonTow) //判断两个字符串是否相同
//{
// Console.WriteLine("喜欢的两个课程相同");
//}
//else {

// Console.WriteLine("喜欢的两个课程不同");
// lessonOne= lessonOne.ToUpper(); //将字符串中的字符转换成为大写的形式
// lessonTow = lessonTow.ToUpper();
// Console.WriteLine("转换后的第一个结果:{0},转换后的第二个结果:{1}",lessonOne,lessonTow);
// lessonOne=lessonOne.ToLower(); //将字符串中的字符全部转换成为小写的形式
// lessonTow = lessonTow.ToLower();
// Console.WriteLine("第二次转换后的结果,第一个结果:{0},第二个结果{1}",lessonOne,lessonTow);
//}
#endregion
if (lessonOne.Equals(lessonTow, StringComparison.OrdinalIgnoreCase)) //通过两个字符串的值就行比较,第二个参数表示比较的方式,这里是忽视大小写的比较
{
Console.WriteLine("两个课程是相同的");
}
else
{
Console.WriteLine("两个课程是不同的");
}
Console.ReadKey();

}
}
}

字符串的截取:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _06字符串的分割
{
class Program
{
static void Main(string[] args)
{
//分割2008-09-10
string s = "2008-09-10";
char[] cha = { '-' }; //需要删除的字符使用一个char类型的数据进行储存
string [] str= s.Split(cha ,StringSplitOptions.RemoveEmptyEntries); //注意这里用于接收的是字符串数组,字符串中的字符被移除以后,将会生成一个字符串数组。
//Split函数进行字符串中字符的筛选,第一个参数表示需要筛选的字符数组,筛选以后的结果是对应的位置的字符将会被去除,但是用空标志进行占位。
//使用了第二个参数以后,可以将空占位符号进行删除,使得返回的字符串数组是连续的。
Console.WriteLine("{0}年{1}月{2}号",str[0],str[1],str[2]);
Console.ReadKey();

}
}
}‘运行结果:

 

 字符串的综合历程:

 

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 字符串练习
{
class Program
{
static void Main(string[] args)
{
#region 读取计算机中的文件的内容
// string path1 = @"D:\桌面转移\1.txt";//将文件的路径放在一个字符串中,复制这里的路径的时候需要注意,不要直接进行复制,需要找到真正的路径,在资源管理器中寻找文件的路径
// string[] str1 = File.ReadAllLines(path1);// 阅读文件的所有的行
//// Console.WriteLine("{0},{1},{2}", str1[0], str1[1], str1[2]);
// for (int i = 0; i < str1.Length; i++)
// {
// string[] str2=str1[i].Split(new char[] { ' ' },StringSplitOptions.RemoveEmptyEntries); //删除字符串中的空格

// Console.WriteLine((str2[0].Length>8?str2[0].Substring(0,8):str2[0])+'|'+str2[1]);
// }


// Console.ReadKey();
#endregion
#region 字符串的反转
//string str = "abcdefg"; //定义字符串
//char[] cha = str.ToCharArray();//将字符串转换转换成为数组
//char temp;
//for (int i = 0; i <= cha.Length / 2 - 1; i++)
//{
// temp = cha[i];
// cha[i] = cha[cha.Length - 1 - i];
// cha[cha.Length - 1 - i] = temp;
//}
//str = new string(cha); //将字符数组转化成为字符串,注意这里进行了字符串对象的创建,并且在进行初始化,最后再对str进行赋值
//Console.WriteLine(str);
//Console.ReadKey();
#endregion
#region 实现 字符串中的单词的反转
// string str = "hello C sharp";
//string[] newStr =str.Split(new char[] { ' '},StringSplitOptions.RemoveEmptyEntries); //删除字符串中的空格,new char[]{ }表示创建一个char;类型的数组对象,并且进行初始化。,返回的是一个字符串类型的数组
// for (int i = 0; i < newStr .Length; i++)
// {
// Console.Write("{0}",newStr[i]); //遍历字符串数组
// }
// Console.WriteLine(); //进行换行处理
// //交换字符换数组中的元素的循序
// for (int i = 0; i < newStr.Length/2; i++)
// {
// string strTemp = newStr[i];
// newStr[i] = newStr[newStr.Length-1-i];
// newStr[newStr.Length -1- i] = strTemp;

// }
// for (int i = 0; i <newStr.Length; i++)
// {
// Console.Write("{0}", newStr[i]); //字符产数组转换以后进行遍历
// }
// Console.WriteLine();
// // 将字符串数组中的元素使用特定的分隔符号进行连接
// str=string.Join(" ",newStr); // 将字符串数组中的元素使用空格进行连接,返回连接以后的字符串
// //将连接后的字符串进行打印
// Console.WriteLine(str);
// Console.ReadKey();
#endregion
#region 字符串的截取,截取任意长度的字符串,通常是要找到字符换字符串的坐标位置
//string email = "232234234@qq.com";
//int index = email.IndexOf( '@'); //获取字符串中某一字符的位置坐标,记住这里的函数Index()
//string Namestr = email.Substring(0, index); //截取用户名,这里是从初始位置到指定坐标的位置,记住这里的函数Substring()截取字符串中的内容
//string yuStr = email.Substring(index + 1); //截取域名,这里是从指定位置到最后
//Console.WriteLine(Namestr);
//Console.WriteLine(yuStr);
//Console.ReadKey();
#endregion
#region 检索字符串中的需要的需要的内容的坐标,可以检索一个字符同时也可以检索字符串
//string str = "ahsjdhjehdjshedjfehejsed";
//int index = str.IndexOf('e'); //检索字符出串中e的位置的坐标,如果检索到指定的内容将会返回对应内容的索引,使用index()进行检索,如果没有检索到内容,其返回值为-1。
//int count = 0;
//while (index != -1) {
// count++;
// Console.WriteLine("第{0}次出现e的位置坐标{1}", count, index);
// index = str.IndexOf('e',index+1);
//}
//Console.ReadKey();
#endregion
#region 检索某一个字符换中的子字符串,使用的函数是contains(),替换字符串中的元素,使用的是replace()函数
//string str = "C#语言的学习是一件无聊的事情";
//Console.WriteLine(str);
//bool a=str.Contains("无聊"); //检索字符串中的子元素,返回的是一个布尔类型的元素
//if (a) {

// str = str.Replace("无聊","有趣");
//}
//Console.WriteLine(str);
//Console.ReadKey();
#endregion
#region 将字符串数组进行连接,转化成为字符串再进行切割,去掉空字符
//string[] str = { "张三", "李四", "王五" };
//string str1 =string.Join("|",str ); //将字符串数组中的元素使用|符号进行连接,返回值是一个字符串
//str=str1.Split(new char[] { '|'},StringSplitOptions.RemoveEmptyEntries); //这里需要非常的注意
//for (int i = 0; i <str.Length; i++)
//{
// Console.WriteLine("{0}个索引的元素是{1}", i, str[i]);
//}
//Console.ReadKey();
#endregion
#region 字符串的比较,compare()函数,两个字符串相等则返回0,前者大返回1,前者小返回-1;
string str1 = "你好C#";
string str2 = "好好学习";
string str3 = "ABCDEF";
string str4 = "abcdef";
Console.WriteLine(string.Compare(str1, str2));
Console.WriteLine(string.Compare(str3, str4, true));
Console.ReadKey();

#endregion
}

}
}

标签:Console,string,WriteLine,C#,str,字符串,using,可变性
来源: https://www.cnblogs.com/Nic-zhang/p/16693807.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有