字符串的定义和常用方法

文章目录

  • 前言
  • 一、概念
  • 二、关键性质
  • 三、String == null和""的区别
  • 四、常用方法
    • 一、object to string
    • 二、字符串拼接
    • 三、判断字符串是否为””、null
    • 四、Substring(),截取字符串
    • 五、Replace(),替换字符串
    • 六、Split(),字符串转成字符串数组
    • 七、Join(),字符串数组转字符串
    • 八、ToLower() and ToUpper(),大小写转换
    • 九、Trim() and TrimEnd() and TrimStart(),去掉字符串前后指定的字符或字符数组
    • 十、判断字符串是否包含指定字符串
    • 十一、字符串比较
    • 十二、字符串复制
    • 十三、字符串插入
  • 五、字符串分解案列
  • 六、总结


前言

基于日常工作中,常常用到字符串的相关方法,本文主要介绍了字符串的概念和常用方法,要看哪部分请私信我,我加上去。觉得不完善的地方也烦请私信我补充


一、概念

首先了解下字符的定义:
字符指类字形单位或符号,包括字母、数字、运算符号、标点符号和其他符号,以及一些功能性符号。字符是电子计算机或无线电通信中字母、数字、符号的统称,其是数据结构中最小的数据存取单位,通常由8个二进制位(一个字节)来表示一个字符。

字符是计算机中经常用到的二进制编码形式,也是计算机中最常用到的信息形式。根据计算机的编码方式不同,字符在不同编码方式的存储所占用字节数也不同。字符串,多个字符拼接物。


二、关键性质

不变性:
一般情况下,我们将“一经赋值,其值就不能被更改”视为不变性,字符串的不变性就是指,字符串一经赋值,其值就不能被更改,当通过代码使字符串变量等于一个新的值的时候,堆上会出现一个新的字符串,然后,栈上的变量指向新的字符串,无法更改原来字符串的值


三、String == null和""的区别

  • string str1 =""; 空字符串,定义一个string的引用并且分配内存空间
  • string str2 = null; 定义一个string的引用,只在栈上分配了空间,在堆上没有分配,直接使用该变量会报空引用错误

四、常用方法

一、object to string

  1. ToString(),object为null会报空引用错误
  2. obj + "",字符串为null就把字符串转成""

二、字符串拼接

  1. +
  2. string.Format():string str3 = string.Format("{0}, {1}", str, str2);
  3. string.concat():string.concat('11', 'aa')='11aa';

三、判断字符串是否为””、null

  1. str == ""str == null
  2. IsNullOrEmpty()
  3. IsNullOrWhiteSpace()
    基本定义用法同上IsNullOrEmpty(),但是IsNullOrEmpty() 标注了 “Performance critical to inline across NGen image boundaries”,所以推荐用IsNullOrWhiteSpace()

四、Substring(),截取字符串

  1. Substring(int startIndex),从指定位置开始截取字符串
  2. Substring(int startIndex, int length),从指定的位置开始,截取给定长度的字符串

五、Replace(),替换字符串

  1. Replace(Char first, Char second)
  2. Replace(String firstString, String secondString)
    用新字符串替换旧字符串,字符也可以
    第一个参数是原字符,第二个参数是替换的字符

六、Split(),字符串转成字符串数组

Split(params char[] separator)
参数是根据字符数组的每个字符来划分具体从哪里分割,分割后该字符不归属于字符串数组

七、Join(),字符串数组转字符串

Join(String separator, params String[] value)
第一个参数是数组中每个字符间隔的自定义字符
第二个参数是要拼接的字符串数组

八、ToLower() and ToUpper(),大小写转换

  1. ToLower(),把字符串转成小写、
  2. ToUpper(),把字符串转成大写

九、Trim() and TrimEnd() and TrimStart(),去掉字符串前后指定的字符或字符数组

  1. Trim(),从当前字符串的开头和结尾删除所有空白字符后剩余的字符串
  2. TrimEnd(),去掉字符串末尾出现的字符或字符数组
  3. TrimStart(),去掉头部出现的字符或字符数组

十、判断字符串是否包含指定字符串

  1. Contains(),字符串是否包含指定的字符串
  2. IndexOf(),返回指定字符串在字符串中的位置
  3. StartsWith(),字符串头部是否包含指定字符串
  4. EndsWith(),字符串末尾是否包含指定字符串

十一、字符串比较

  1. Compare()
    int res = string.Compare(string str1, string str2);
    按照字典排序比较,当str1 > str2时,返回1;当str1 = str2时,返回0;当str1 < str2时,返回 - 1
  2. Equals()
    bool < strName >.Equals(string str);
    比较如果相等就返回true,否则返回false

十二、字符串复制

Copy(s, I, I) 从字符串s中截取第I个字符开始后的长度为l的子串。
如:copy('abdag', 2, 3) ='bda'

十三、字符串插入

Insert(s1, s2, I) 把s1插入到s2的第I个位置
如:s:= abc; insert('12', s, 2); 结果s:='a12bc'


五、字符串分解案列

需求:按照JSON文件对比机器命令id返回结果,把机器错误信息转义成中文,即数组里的数字,难点,数组里包含了个小数组,开头结尾不要
错误格式如:
0,{[[-2,3],[],[0],[],[],[21120],[21120]]},GetErrorID();
0,{[[85],[],[],[],[],[]]},GetErrorID();
但是没有错时,返回0,{[[],[],[],[],[],[]]},GetErrorID(); ,
会出现少掉前面那个数组,第一个数组为一类,其余为另一类

private string CauseShow(string id)
		{
			try
			{
				string[] s1 = id.Split(new char[] { '{', '}' }, StringSplitOptions.None);
				string[] s2 = s1[1].Split(new char[] { ',' }, StringSplitOptions.None);
				int Length = s2.Length;
				string controllerStr = null;
				string EndStr = null;
				if (Length == 6)
				{
					for (int i = Length - 1; i > Length - 6; i--)
					{
						if ((i == Length - 1 && s2[Length - 1].Length > 3) || (s2[i].Length > 2 && !(i == Length - 1)))
						{
							string[] s = s2[i].Split(new char[] { '[', ']' }, StringSplitOptions.None);
							string ss = null;
							for (int j = 0; j < alarm_servo.Length; j++)
							{
								if (Convert.ToInt32(s[1].ToString()) == alarm_servo[j].id)
								{
									ss = alarm_servo[j].Zh_CN.description;
								}
							}
							s2[i] = ss;
						}


						if (s2[i].Length == 2 || (s2[i].Length == 3 && i == Length - 1))
						{
							s2[i] = "";
						}
						if (i <= 0)
						{
							break;
						}
					}
					string[] s3 = s1[1].Split(new char[] { ',', '[', ']' }, StringSplitOptions.None);
					ArrayList s3List = new ArrayList();
					for (int i = 2; i < s3.Length - 2; i++)
					{
						if (s3[i] != "")
						{
							s3List.Add(s3[i]);
						}
						else
						{
							break;
						}
					}
					if (s3List.Count > 0)
					{
						for (int i = 0; i < s3List.Count; i++)
						{
							for (int j = 0; j < alarm_controller.Length; j++)
							{
								if (Convert.ToInt32(s3List[i].ToString()) == alarm_controller[j].id)
								{

									controllerStr += alarm_controller[j].Zh_CN.description;
									if (!(i == s3List.Count - 1))
									{
										controllerStr += ",";
									}
								}

							}
						}
					}

					for (int i = Length - 1; i > Length - 5; i--)
					{
						if (s2[i] == "")
						{
							continue;
						}
						else
						{
							EndStr += s2[i] + ",";
						}
					}
				}
				else
				{
					for (int i = Length - 1; i > Length - 6; i--)
					{

						if ((i == Length - 1 && s2[Length - 1].Length > 3) || (s2[i].Length > 2 && !(i == Length - 1)))
						{
							string[] s = s2[i].Split(new char[] { '[', ']' }, StringSplitOptions.None);
							string ss = null;
							for (int j = 0; j < alarm_servo.Length; j++)
							{
								if (Convert.ToInt32(s[1].ToString()) == alarm_servo[j].id)
								{
									ss = alarm_servo[j].Zh_CN.description;
								}
							}
							s2[i] = ss;
						}

						if (s2[i].Length == 2 || (s2[i].Length == 3 && i == Length - 1))
						{
							s2[i] = "";
						}
						if (i <= 0)
						{
							break;
						}
					}
					string[] s3 = s1[1].Split(new char[] { ',', '[', ']' }, StringSplitOptions.None);
					ArrayList s3List = new ArrayList();
					for (int i = 2; i < s3.Length - 2; i++)
					{
						if (s3[i] != "")
						{
							s3List.Add(s3[i]);
						}
						else
						{
							break;
						}
					}
					if (s3List.Count > 0)
					{
						for (int i = 0; i < s3List.Count; i++)
						{
							for (int j = 0; j < alarm_controller.Length; j++)
							{
								if (Convert.ToInt32(s3List[i].ToString()) == alarm_controller[j].id)
								{

									controllerStr += alarm_controller[j].Zh_CN.description;
									if (!(i == s3List.Count - 1))
									{
										controllerStr += ",";
									}
								}

							}
						}
					}


					for (int i = Length - 1; i > Length - 5; i--)
					{
						if (s2[i] == "")
						{
							continue;
						}
						else
						{
							EndStr += s2[i] + ",";
						}
					}
				}
			}
		}

六、总结

以上就是今天要讲的内容,本文主要介绍了字符串的使用,要想灵活的使用上述方法,多多使用是必不可少的哦!

你可能感兴趣的:(开发语言,后端)