一.string类
public static int Compare( string strA, string strB )
比较两个指定的 string 对象,并返回一个表示它们在排列顺序中相对位置的整数。该方法区分大小写。
public static int Compare( string strA, string strB, bool ignoreCase )
比较两个指定的 string 对象,并返回一个表示它们在排列顺序中相对位置的整数。但是,如果布尔参数为真时,该方法不区分大小写。
public bool Contains( string value )
返回一个表示指定 string 对象是否出现在字符串中的值。
public static string Copy( string str )
创建一个与指定字符串具有相同值的新的 String 对象。
public void CopyTo( int sourceIndex, char[] destination, int destinationIndex, int count )
从 string 对象的指定位置开始复制指定数量的字符到 Unicode 字符数组中的指定位置。
public bool EndsWith( string value )
判断 string 对象的结尾是否匹配指定的字符串。
public int IndexOf( char value )
返回指定 Unicode 字符在当前字符串中第一次出现的索引,索引从 0 开始。
public int IndexOf( string value )
返回指定字符串在该实例中第一次出现的索引,索引从 0 开始。
public int IndexOf( char value, int startIndex )
返回指定 Unicode 字符从该字符串中指定字符位置开始搜索第一次出现的索引,索引从 0 开始。
public int IndexOf( string value, int startIndex )
返回指定字符串从该实例中指定字符位置开始搜索第一次出现的索引,索引从 0 开始。
public int IndexOfAny( char[] anyOf )
返回某一个指定的 Unicode 字符数组中任意字符在该实例中第一次出现的索引,索引从 0 开始。
public string Insert( int startIndex, string value )
返回一个新的字符串,其中,指定的字符串被插入在当前 string 对象的指定索引位置。
public static string Join( string separator, string[] value )
连接一个字符串数组中的所有元素,使用指定的分隔符分隔每个元素。
public static string Join( string separator, string[] value, int startIndex, int count )
连接一个字符串数组中的指定位置开始的指定元素,使用指定的分隔符分隔每个元素。
public int LastIndexOf( char value )
返回指定 Unicode 字符在当前 string 对象中最后一次出现的索引位置,索引从 0 开始。
public string Remove( int startIndex )
移除当前实例中的所有字符,从指定位置开始,一直到最后一个位置为止,并返回字符串。
public string Remove( int startIndex, int count )
从当前字符串的指定位置开始移除指定数量的字符,并返回字符串。
public string Replace( char oldChar, char newChar )
把当前 string 对象中,所有指定的 Unicode 字符替换为另一个指定的 Unicode 字符,并返回新的字符串。
public string Replace( string oldValue, string newValue )
把当前 string 对象中,所有指定的字符串替换为另一个指定的字符串,并返回新的字符串。
public string[] Split( params char[] separator )
返回一个字符串数组,包含当前的 string 对象中的子字符串,子字符串是使用指定的 Unicode 字符数组中的元素进行分隔的。
public string[] Split( char[] separator, int count )
返回一个字符串数组,包含当前的 string 对象中的子字符串,子字符串是使用指定的 Unicode 字符数组中的元素进行分隔的。int 参数指定要返回的子字符串的最大数目。
public bool StartsWith( string value )
判断字符串实例的开头是否匹配指定的字符串。
public char[] ToCharArray()
返回一个带有当前 string 对象中所有字符的 Unicode 字符数组。
public char[] ToCharArray( int startIndex, int length )
返回一个带有当前 string 对象中所有字符的 Unicode 字符数组,从指定的索引开始,直到指定的长度为止。
public string ToLower()
把字符串转换为小写并返回。
public string ToUpper()
把字符串转换为大写并返回。
public string Trim()
移除当前 String 对象中的所有前导空白字符和后置空白字符。
{
class Program
{
static void Main(string[] args)
{
string s = "你好,世界";
string s2 = "hello,world";
//比较的是它们的首字母的Unicode码点值,相等则两个字符串各向后一位继续比,s<s2返回-1,s==s2返回0,s>s2返回1
Console.WriteLine(string.Compare(s,s2));//1
Console.WriteLine(s2.Contains("wor"));//True
char[] chas=new char[10];
//第一个参数字符串起始下标,第三个参数字符数组存储起始下标,第四个参数复制长度
s2.CopyTo(3, chas, 0, 4);
Console.WriteLine(chas);//lo,w
Console.WriteLine(s.IndexOf('世')+" "+s.IndexOf("世")+" "+s2.LastIndexOf("l"));//3 3 9
//插入时插入在所给下标前面
Console.WriteLine(s.Insert(1,"计算机"));//你计算机好,世界
string[] strs = {"第一组","第二组","第三组","第四组" };
string newstr = string.Join("---",strs);
Console.WriteLine(newstr);//第一组---第二组---第三组---第四组
//第一个参数为开始下标,第二个参数为移除字符数,包括开始下标的字符
Console.WriteLine(s.Remove(1,2));//你世界
Console.WriteLine(s2.Replace('l','v'));//hevvo,worvd
char[] chas2 = { '-','第'};
//第一个参数是char[],只要有里面的字符就分割一次,第二个参数限制分割长度
string[] strs2 = newstr.Split(chas2);
Console.WriteLine(strs2.Length);//14
Console.ReadKey();
}
}
}
二.StringBuilder类
string类一经建立实则在内存中不可修改,每次修改都需在字符串存储区域重新建立一个新字符串,因而大量的修改会给GC管理机制带来大量的负荷,因此StringBuilder类被设计了出来。StringBuilder类有其自身的容量作为字符串缓冲区的大小,每当字符串长度超过容量大小,容量就会自动向外扩大一部分,运算时性能也比string要强得多。
public StringBuilder Append(string value);
追加后面的字符串,此函数有多种重载和用法,具体查C#接口。另有格式化追加字符串方法AppendFormat();
public StringBuilder Insert(int index, string value);
第一个参数插入下标位置,第二个参数插入字符串
public StringBuilder Replace(char oldChar, char newChar);
旧字符替换成新字符,也可将参数改成字符串。
public StringBuilder Remove(int startIndex, int length);
移除,第一个参数开始移除下标,第二个移除长度。
{
class Program
{
static void Main(string[] args)
{
StringBuilder sb = new StringBuilder("hello,world");
Console.WriteLine("长度:"+sb.Length + " 容量:" + sb.Capacity);//长度:11 容量:16
sb.Append("!!!");//添加
Console.WriteLine(sb);//hello,world!!!
sb.Insert(3, "你好");//插入
Console.WriteLine(sb);//hel你好lo,world!!!
sb.Replace('!','?');//替换
Console.WriteLine(sb);//hel你好lo,world???
sb.Remove(4, 7);//移除
Console.WriteLine(sb);//hel你ld???
Console.ReadKey();
}
}
}
三.FileStream
文件流,可以通过代码读写文件。
其创建该类语法如下
FileStream <object_name> = new FileStream(file_name,FileMode Enumerator, FileAccess Enumerator,FileShare Enumerator);
{
class Program
{
static void Main(string[] args)
{
string path = @"E:\example.txt";
writeFile(path,"随便写点什么");
//此时,E盘里已经有了个文本文件,记载着字节流,正确显示出UTF-8编出来的汉字。
readFile(path);
Console.ReadKey();
}
static void writeFile(string path,string s)
{
FileStream fileStream = new FileStream(path, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite);
byte[] bytes = Encoding.UTF8.GetBytes(s);
fileStream.Write(bytes, 0, bytes.Length);
fileStream.Flush();
fileStream.Close();
}
static char[] readFile(string path)
{
if (File.Exists(path))
{
FileStream fileStream = new FileStream(path, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite);
byte[] bytes = new byte[fileStream.Length];
fileStream.Read(bytes, 0, bytes.Length);
char[] c = Encoding.UTF8.GetChars(bytes);
Console.WriteLine(c);//随便写点什么
return c;
}
else return null;
}
}
}
四.StreamReader和StreamWriter
另一种文件流,但格式处理起来更加简单。
public StreamWriter(string path, bool append, Encoding encoding, int bufferSize);
第一个参数是路径,第二个是是否追加之前的文本,第三个编码,第四个缓冲区大小
public override void Close()
关闭当前的 StreamWriter 对象和基础流。
public override void Flush()
清理当前编写器的所有缓冲区,使得所有缓冲数据写入基础流。
public virtual void Write(string value)//WriteLine(),参数支持多种基础数据类型
把一个字符串的文本表示形式写入到文本字符串或流。(继承自 TextWriter。)
public StreamReader(string path, Encoding encoding, bool detectEncodingFromByteOrderMarks, int bufferSize);
第三个参数是是否查找字节顺序标记
public override void Close()
关闭 StreamReader 对象和基础流,并释放任何与读者相关的系统资源。
public override int Peek()
返回下一个可用的字符,但不使用它。
public override int Read()//ReadLine()
从输入流中读取下一个字符,并把字符位置往前移一个字符。
他们的第一个参数除了可以用路径,也可以用Stream类的对象代替。
{
class Program
{
static void Main(string[] args)
{
string path = @"E:\example.txt";
StreamWriter sw = new StreamWriter(path,true);
sw.WriteLine("qwer");
sw.Flush();
sw.Close();
StreamReader sr = new StreamReader(path, Encoding.UTF8);
string line = "";
while((line=sr.ReadLine())!=null)
{
Console.WriteLine(line);//程序运行几次,输出几行qwer
}
Console.ReadKey();
}
}
}
五.目录类
Directory类可以直接创建文件夹目录,常用方法如下
public static DirectoryInfo CreateDirectory(string path);
在指定路径创建目录
public static bool Exists(string path);
存在该目录返回true,否则返回false
public static void Delete(string path, bool recursive);
第二个参数为是否递归的删除子目录等文件,若删除为true,否则为false
public static void Move(string sourceDirName, string destDirName);
将第一个路径参数的目录移动到第二个路径参数的位置
{
class Program
{
static void Main(string[] args)
{
string path = @"E:\测试C#文件夹";
Directory.CreateDirectory(path);
if (Directory.Exists(path))
Console.WriteLine("存在文件夹");
Directory.Move(path,@"E:\游戏\测试文件夹");
Console.ReadKey();
}
}
}
DirectoryInfo类
public DirectoryInfo(string path);
这是其构造函数,但是构造后并不会立即创建目录,而需调用Create()方法才行。在其指定路径上还可以做一些其它操作,常用方法如下。
public void Create()
创建一个目录
public DirectoryInfo CreateSubdirectory(string path)
在指定的路径上创建子目录,指定的路径可以是相对于 DirectoryInfo 类的实例的路径
public override void Delete()
如果为空的,则删除该 DirectoryInfo,非空递归删除可加参数True
public DirectoryInfo[] GetDirectories()
返回当前目录的子目录
public FileInfo[] GetFiles()
从当前目录返回文件列表
{
class Program
{
static void Main(string[] args)
{
string strDir = @"E:/虚拟机/1h";
DirectoryInfo dirInfo = new DirectoryInfo(strDir);
dirInfo.Create();
dirInfo.CreateSubdirectory("子1号");
dirInfo.CreateSubdirectory("子2号");
DirectoryInfo[] dirs = dirInfo.GetDirectories();
foreach(var v in dirs)
{
//这里只会输出里面的目录文件名
Console.WriteLine(v.Name);//子1号 子2号
}
dirInfo.Delete(true);
Console.ReadKey();
}
}
}