String类有不可改变性。每次执行字符操作时,都会创建一个新的String对象。
StringBuilder 类解决了对字符串进行重复修改的过程中创建大量对象的问题。初始化一个StringBuilder 之后,它会自动申请一个默认的StringBuilder 容量(默认值是16),这个容量是由Capacity来控制的.并且允许,我们根据需要来控制Capacity的大小,也可以通过Length来获取或设置StringBuilder 的长度.
当需要对字符串频繁操作时优先使用StringBuilder,stringBuilder会更高效。
下面是string的常用方法:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 练习测试
{
class Program
{
static void Main(string[] args)
{
//1.索引访问字符
string s = "abcd";
Console.WriteLine(s[3]);
Console.WriteLine("--------------------------------------------------------------");
//2.打散为字符 string.ToCharArray()
string s1 = "abcd";
char[] c1 = s1.ToCharArray();
for (int i = 0; i < c1.Length; i++)
{
Console.WriteLine(c1[i]);
}
Console.WriteLine("--------------------------------------------------------------");
//3截取字符串 string.Substring
string s2 = "abcd";
Console.WriteLine(s2.Substring(3)); //截取索引3后面所有的字符
Console.WriteLine(s2.Substring(1,3));//截取索引1开始截取三个字符
Console.WriteLine("--------------------------------------------------------------");
//4匹配索引 string.IndexOf() string.Lastindexof()
string s3 = "abcabcdabc";
Console.WriteLine(s.IndexOf("a")); // 从字符串头部开始搜索第一个匹配字符A的位置索引,输出"0"
Console.WriteLine(s.IndexOf("bcd")); // 从字符串头部开始搜索第一个匹配字符串BCD的位置,输出"4"
Console.WriteLine(s.LastIndexOf('c')); // 从字符串尾部开始搜索第一个匹配字符C的位置,输出"5"
Console.WriteLine(s.LastIndexOf("ab")); // 从字符串尾部开始搜索第一个匹配字符串BCD的位置,输出"3"
Console.WriteLine(s.IndexOf("E")); // 从字符串头部开始搜索第一个匹配字符串E的位置,没有匹配输出"-1";
Console.WriteLine("--------------------------------------------------------------");
//5.判断是否包含字符串 string.Contains()
string s4 = "abcd";
Console.WriteLine(s4.Contains("bc"));
Console.WriteLine("--------------------------------------------------------------");
//6.大小写转换string.ToUper() string.ToLower()
string s5 = "abcd";
Console.WriteLine(s5.ToUpper()); //转为大写
Console.WriteLine(s5.ToLower()); //专为小写
Console.WriteLine("--------------------------------------------------------------");
//7.截头去尾 string.Trim()
string s6 = "__AB__CD__";
Console.WriteLine(s6.Trim('_')); // 移除字符串中头部和尾部的'_'字符,输出"AB__CD"
Console.WriteLine(s6.TrimStart('_')); // 移除字符串中头部的'_'字符,输出"AB__CD__"
Console.WriteLine(s6.TrimEnd('_')); // 移除字符串中尾部的'_'字符,输出"__AB__CD"
//8插入和删除(Insert和Remove)
Console.WriteLine("--------------------------------------------------------------");
string s7 = "ADEF";
Console.WriteLine(s7.Insert(1, "BC")); // 在字符串的第2位处插入字符串"BC",输出"ABCDEF"
Console.WriteLine(s7);
Console.WriteLine(s7.Remove(1)); // 从字符串的第2位开始到最后的字符都删除,输出"A"
Console.WriteLine(s7);
Console.WriteLine(s7.Remove(0, 2)); // 从字符串的第1位开始删除2个字符,输出"EF"
Console.WriteLine();
Console.WriteLine("--------------------------------------------------------------");
//9替换字符(串)(Replace)
string s8 = "A_B_C_D";
Console.WriteLine(s8.Replace('_', '-')); // 把字符串中的'_'字符替换为'-',输出"A-B-C-D"
Console.WriteLine(s8.Replace("_", "")); // 把字符串中的"_"替换为空字符串,输出"A B C D"
Console.WriteLine();
Console.WriteLine("--------------------------------------------------------------");
//10分割为字符串数组(Split)
string s9 = "ab,cd,ef,gg";
string[] arr = s9.Split(',');
Console.WriteLine(arr[2]);
Console.WriteLine("--------------------------------------------------------------");
//(11)格式化(静态方法Format)
Console.WriteLine(string.Format("{0} + {1} = {2}", 1, 2, 1 + 2));
Console.WriteLine(string.Format("{0} / {1} = {2:0.000}", 1, 3, 1.00 / 3.00));
Console.WriteLine(string.Format("{0:yyyy年MM月dd日}", DateTime.Now));
Console.WriteLine("--------------------------------------------------------------");
//12.Equals 比较两个字符串是否相等
string str1="asd";
string str2="ert";
bool b = str1.Equals(str2); //b=false;
Console.WriteLine(b);
//13.IsNullOrEmpty判断字符是否为null或者为空,返回值为bool;
string str11 = "hahha";
bool b1 = string.IsNullOrEmpty(str11);//b1=false;
string str22 = "";
bool b2 = string.IsNullOrEmpty(str22);//b2=true;
Console.ReadKey();
}
}
}
下面是stringBuilder的常用方法:
(1)Append 方法可用来将文本或对象的字符串表示形式添加到由当前 StringBuilder 对象表示的字符串的结尾处。以下示例将一个 StringBuilder 对象初始化为“Hello World”,然后将一些文本追加到该对象的结尾处。将根据需要自动分配空间。
StringBuilder MyStringBuilder = new StringBuilder(“Hello World!”);
MyStringBuilder.Append(” What a beautiful day.”);
Console.WriteLine(MyStringBuilder);
此示例将 Hello World! What a beautiful day. 显示到控制台。
(2)AppendFormat 方法将文本添加到 StringBuilder 的结尾处,而且实现了 IFormattable 接口,因此可接受格式化部分中描述的标准格式字符串。可以使用此方法来自定义变量的格式并将这些值追加到 StringBuilder 的后面。以下示例使用 AppendFormat 方法将一个设置为货币值格式的整数值放置到 StringBuilder 的结尾。
int MyInt = 25;
StringBuilder MyStringBuilder = new StringBuilder(“Your total is “);
MyStringBuilder.AppendFormat(“{0:C} “, MyInt);
Console.WriteLine(MyStringBuilder);
此示例将 Your total is $25.00 显示到控制台。
(3)Insert 方法将字符串或对象添加到当前 StringBuilder 中的指定位置。以下示例使用此方法将一个单词插入到 StringBuilder 的第六个位置。
StringBuilder MyStringBuilder = new StringBuilder(“Hello World!”);
MyStringBuilder.Insert(6,”Beautiful “);
Console.WriteLine(MyStringBuilder);
此示例将 Hello Beautiful World! 显示到控制台。
(4)可以使用 Remove 方法从当前 StringBuilder 中移除指定数量的字符,移除过程从指定的从零开始的索引处开始。以下示例使用 Remove 方法缩短 StringBuilder。
StringBuilder MyStringBuilder = new StringBuilder(“Hello World!”);
MyStringBuilder.Remove(5,7);
Console.WriteLine(MyStringBuilder);
此示例将 Hello 显示到控制台。
(5)使用 Replace 方法,可以用另一个指定的字符来替换 StringBuilder 对象内的字符。以下示例使用 Replace 方法来搜索 StringBuilder 对象,查找所有的感叹号字符 (!),并用问号字符 (?) 来替换它们。
StringBuilder MyStringBuilder = new StringBuilder(“Hello World!”);
MyStringBuilder.Replace(‘!’, ‘?’);
Console.WriteLine(MyStringBuilder);