字符串的一些方法
写一个程序逐行输入字符串,将每一行的内容写入到同个目录下的1.txt文件并换行,最后遇到q字符结束写入
StreamWriter fWrite = new StreamWriter("./1.TXT", true);//true表示,是否使用追加的形式
while (true)
{
string addStr = Console.ReadLine();
//q找出来对应的值不为-1,跳出循环
int Qindex = addStr.IndexOf("q");//取得给定字符串或字符第一次出现的位置,没有找到就返回-1.
Console.WriteLine(Qindex);
if(Qindex != -1)
{//subString
addStr = addStr.Substring(0, Qindex);
fWrite.WriteLine(addStr);
break;
}
else
{
fWrite.WriteLine(addStr);
}
}//此程序可能有逻辑错误
一些例子
string str1 = "12345";
string str2 = "234";
Console.WriteLine(str1.CompareTo(str2));//对比两个字符串是否相同,相同时返回0,不同时返回-1
//字符串截取
str1 =str1.Substring(1,3);//123,初始下标位置,个数
Console.WriteLine(str1);
string newStr = str1.Replace("1", "22"); //将字符串中的某个字符转换为其他字符串,返回一个新字符串
## 使用StringBuilder创建字符串
如果我们频繁去删除和添加字符串中的内容,使用string生成的字符串我们知道每次更改会重新指向堆中新的数据,这样会重复删除新建数据非常耗性能,如果使用StringBuilder不会频繁申请内存空间,可以自动向后扩展
StringBuilder str3 = new StringBuilder("1234");
//当小于16时基本容量是16,大于16就扩展到字符串长度一致
str3.Append("5");
str3.Insert(0, "0");
str3.Remove(0, 1);
// str3.Clear();
string str4 = str3.ToString();
Console.WriteLine(str4);
Console.WriteLine(str3.Length);
Console.WriteLine(str3.Capacity);
正则表达式
各种元字符
(1)字符类
[ char_group]:匹配字符组中的任意一个字符
[^char_group]:匹配除字符组之外的任意一个字符
[first-last]:匹配从first到last的字符范围中的任意一个字符,字符范围包括first和last。
.一个点:通配符,匹配除\n之外的任意一个字符
\w:匹配任意一个单词(word)字符,单词字符通常是指A-Z、a-z和0-9
\W:匹配任意一个非单词字符,是指除A-Z、a-z和0-9之外的字符
\s:匹配任意一个空白字符
\S:匹配任意一个非空白字符
\d:匹配任意一个数字字符
\D:匹配任意一个非数字字符
复制代码
(2)定位类
^:默认情况下,匹配字符串的开始位置;在多行模式下,匹配每行的开始位置;
$:默认情况下,匹配字符串的结束位置,或 字符串结尾的\n之前的位置;在多行模式下,匹配每行结束之前的位置,或者每行结尾的\n之前的位置。
\A:匹配字符串的开始位置;
\Z:匹配字符串的结束位置,或 字符串结尾的\n之前的位置;
\z:匹配字符串的结束位置;
\G:匹配上一个匹配结束的位置;
\b:匹配一个单词的开始或结束的位置;
\B:匹配一个单词的中间位置;
复制代码
(3)量词、贪婪和懒惰
*:规定前面字符出现0次或多次
+:出现1次或多次
?:出现0次或1次
{n}:出现n次
{n,}:出现至少n次
{n,m}:出现n到m次
x|y x或者y中的一个字符
一些示例
string pardia = @"[a-z]";//@取消转义 ,[]代表的是匹配其中任意一个字符,a-z的任意一个字符//只要有一个字母就返回true
string pardia2 = @"[^0-9]";//加了 ^ 表示除了里面的字符//只要有一个不是里面的字符,就返回true
string pardia3 = @".";//“.”匹配除了\n的任意字符
string pardia4 = @"\W";//匹配特殊字符
string pardia5 = @"\w";//匹配除了特殊字符以外的字符
string pardia6 = @"\d";//匹配任意一个数字字符
string pardia7 = @"[\\d]";//匹配
string pardia8 = @"^1";//匹配开头是1的
string pardia9 = @"1$";//匹配结尾是1的
while (true)
{
string str = Console.ReadLine();
Console.WriteLine(Regex.IsMatch(str, pardia7));
}
Regex.Replace()方法替换匹配出来的字符串
//把所有xxx都替换为太棒了
string pattern = @"x+";
string str = "xxx你好";
string newstr = Regex.Replace(str, pattern, "太棒了");//匹配的字符串,正则表达式,替换的字符串
Console.WriteLine(newstr);
//返回的是match类型,如果要变成字符串要进行强转,返回第一个满足的子串
Regex.IsMatch()判断字符串是否符合正则表达式
string matchStr = "1023840123";
string pattern1 = @"^\d*$";//表示匹配以数字开头,中间有多个数字,并以数字结尾的字符串
bool isMatch =Regex.IsMatch(matchStr, pattern1);//返回bool值
匹配年份 0000到2999 月份1到12 日期1到31
string pattern = @"^([0-2][0-9]{3})-([0][1-9]|[1][0-2])-([0][1-9]|[1-2][0-9]|[3][01])$";
while (true)
{
string str1 = Console.ReadLine();
Console.WriteLine(Regex.IsMatch(str1, pattern));
}
5.匹配是否是正确的邮箱
邮箱的格式是qq号(5~12位数字)+@qq.com
6.Regex.Match(s,pattern)匹配第一个满足的字符串
7.Regex.Matches(s,pattern)匹配所有满足的字符串并返回出来
8.常见的几个正则表达式
文件夹和文件操作
//创建一个文件夹
Directory.CreateDirectory("./图书管理系统");
//File.Create("./图书管理系统/123.txt");
//删除空文件夹,创建一个目录对象
DirectoryInfo dicinfo = new DirectoryInfo("./图书管理系统");
dicinfo.Delete(true);//删除目录以及下面所有文件
// File.Delete("./1.TXT");
//获取目录下面的文件的路径
string[] str = Directory.GetFiles("./图书管理系统");
//遍历删除
foreach (string i in str)
{
File.Delete(i);
}
//正则表达式 匹配出所有满足txt文件类型的路径
string pTxt = @".+\.txt$";// “\” 取消转义
foreach (string i in str)
{
if (Regex.IsMatch(i, pTxt))
{
File.Delete(i);
}
}
//获取文件夹名
string[] dicNames = Directory.GetDirectories("./");
//获取的是该目录下的所有文件夹路径
Console.WriteLine(string.Join(" ",dicNames));
使用学到的文件操作,创建三个文件文件名分别是数学.txt,语文.txt,英语.txt,里面分别存放着50个学生的数学,语文,英语成绩,每一行放着名字和对应的分数,名字是小明1,小明2这样的规律显示,分数随机,每一行显示的完整内容是 科目+名字+分数,接下来用我们前面讲到的正则表达式,找出所有txt文件中的小明1的成绩逐行显示到1.txt文件中
for (int i = 0; i < 50; i++)
{
Random random = new Random();
int a = random.Next(100);
fsWriter1.WriteLine("语文" + "+" + "小明" + i + "+" + a);
fsWriter2.WriteLine("数学" + "+" + "小明" + i + "+" + a);
fsWriter3.WriteLine("英语" + "+" + "小明" + i + "+" + a);
}
fsWriter1.Close();
fsWriter2.Close();
fsWriter3.Close();
StreamReader sRead1 = new StreamReader("./语文.txt", Encoding.UTF8);
StreamReader sRead2 = new StreamReader("./数学.txt", Encoding.UTF8);
StreamReader sRead3 = new StreamReader("./英语.txt", Encoding.UTF8);
string patten = @".\+小明1\+.";
StreamReader[] sRead = { sRead1, sRead2, sRead3 };
foreach (StreamReader i in sRead)
{
StreamWriter fsWriter4 = new StreamWriter("./1.txt", true);
string str1 = i.ReadToEnd();
string[] sArray = str1.Split("\n");
foreach (string s in sArray)
{
if (Regex.IsMatch(s,patten))
{
fsWriter4.WriteLine(s);
}
}
fsWriter4.Close();
}