C#对字符串的常用处理总结C#控制台

54 篇文章 1 订阅
2 篇文章 0 订阅
本文介绍了C#中如何将空格分隔的字符串转换为字符和整型数组,以及字符串数组的转换。同时涵盖了字符串截取、正则表达式的应用,如邮箱和密码验证,以及在RichTextBox中处理文本。此外,讨论了如何在CSV文件中操作数据和数组的输出。最后提到了C#的序列化概念,包括BinaryFormatter和XML序列化的方法。
摘要由CSDN通过智能技术生成

目录

C#用空格分隔的字符串string转换成字符数组string[];字符串数组string[]转换成整型数组int[]

1、将用console.readline()获取的用空格分隔的string转换成string[]

2、将string[]转换成int[](c#3.0)

截取指定字符串

C#RichTextBox截断问题

C#正则验证邮箱

C #正则验证密码错误后循环输入

C#获取当前项目目录

C#在文本文件或csv文件中查找指定字符串

C#写入csv文件

c#截取两个指定字符串中间的字符串

C#在csv文件某行插入指定数据或重写数据

在.csv文件中指定字符串后插入

C#循环输出数组的内容for/foreach 规律输出数组第一行012(123) 第二行345(456)

序列化

c# DataGridView中,选中了多个行,如何获取选中的每一行的数据,或者每一行的索引C#中DataGridView实现多选和单选问题

End


C#用空格分隔的字符串string转换成字符数组string[];字符串数组string[]转换成整型数组int[]

1、将用console.readline()获取的用空格分隔的string转换成string[]

var str = Console.ReadLine();

var strArray=str.Split().ToArray();

2、将string[]转换成int[](c#3.0)

int[] intArray = Array.ConvertAll<string,int>(strArray,s=>int.Parse(s));

c#2.0

int[] intArray = Array.ConvertAll<string,int>(strArray,delegate(string s){return int.Parse(s);})

例题

转换前 循环获取输出,换成winform窗体或者一行输入,以空格分隔,string 转string【】然后i取值

int[] niupi = new int[10];

            int n, i, j, t;

            n = int.Parse(textBox2.Text);

            string sr = new Regex("[\\s]+").Replace(textBox3.Text, " ");

            var strArray = sr.Split().ToArray();

            for (i = 0; i <= n - 1; i++)

            {

              

                niupi[i] = int.Parse(strArray[i]);

               

            }

            for (i = 1; i < n; i++)

            {

                for (j = 0; j < n - i; j++)

                {

                    if (niupi[j] < niupi[j + 1])

                    {

                        t = niupi[j];

                        niupi[j] = niupi[j + 1];

                        niupi[j + 1] = t;

                    }

                }

            }

            for (i = 0; i < n; i++)

            {

                if (i < n - 1)

                    textBox1.Text += string.Format("{0} ", niupi[i]);

                else

                    textBox1.Text += string.Format("{0}", niupi[i]);

            }

截取指定字符串

     string s = "qwer[asdf]zxcv";

            int startOps = s.IndexOf("");

            Console.WriteLine(startOps);

            int endOps = s.IndexOf("]", startOps);

            string dataUnit = s.Substring(startOps, endOps - startOps + 1);

            Console.WriteLine(dataUnit);

C#RichTextBox截断问题

 

传入的richtextbox的tostring转换截断和text直接截断有差异,多出来system.form.richrextbox等值

                //截取题目 选项不要了

                //int startOps = rtb.ToString().IndexOf("");

                //int endOps = rtb.ToString().IndexOf("A", startOps);

                //string rtbT = rtb.ToString().Substring(startOps, endOps - startOps + 1); 

                int startOps = rtb.Text.IndexOf("");

                int endOps = rtb.Text.IndexOf("A", startOps);

                string rtbT = rtb.Text.Substring(startOps, endOps - startOps + 1);

                var want = rtb.Text.Substring(startOps, endOps - startOps + 1);

C#正则验证邮箱

            string pattern = @"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$@$!%*?&])[A-Za-z\d$@$!%*?&]{8,}";//至少8个字符,至少1个大写字母,1个小写字母,1个数字和1个特殊字符:

            bool result = false;

            if (!string.IsNullOrEmpty(ypwd.Trim()))

            {

                result = System.Text.RegularExpressions.Regex.IsMatch(ypwd, pattern);

                if (!result)

                {

                    Console.WriteLine("The supplied value is not a valid password");

                }

            }


C #正则验证密码错误后循环输入

string ypwd = Console.ReadLine();

            bool boolpwd = true;

            while (boolpwd)

            {

                Regex r = new Regex(@"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$@$!%*?&])[A-Za-z\d$@$!%*?&]{8,}");//至少8个字符,至少1个大写字母,1个小写字母,1个数字和1个特殊字符:

                if (r.IsMatch(ypwd))

                {

                    boolpwd = false;

                    break;

                }

                else

                {

                    boolpwd = true;

                    Console.WriteLine("The supplied value is not a valid password");

                }

                Console.Write("> ");

                ypwd = Console.ReadLine();

            }

C#获取当前项目目录

string path = "~/../../../../";//保存路径

 string fileName = path + "1.csv";//文件名

C#在文本文件或csv文件中查找指定字符串

using System.Text.RegularExpressions;
string str = System.IO.File.ReadAllText("c:/k.txt");
Regex reg = new Regex("B");
Match mat = reg.Match(str);
while(mat.Success)
{
MessageBox.Show(mat.Index.ToString());//
位置
mat = reg.Match(str, mat.Index+mat.Length);
}

  string str = System.IO.File.ReadAllText("~/../../../../1.csv");

                    Regex reg = new Regex(yemail);

                    Match mat = reg.Match(str);

                    if (mat.Success)

                    {

                        //Console.WriteLine(mat.Index.ToString());//位置 

                        Console.WriteLine("The supplied address is already in use.");

                        boolemail = true;

                        mat = reg.Match(str, mat.Index + mat.Length); //不知道干啥用

                    }

                    else

                    {

                        //Console.WriteLine("can't find the same emial");

                        boolemail = false;

                        break;

                    }

C#写入csv文件

   public static void WriteCsv(string result)

        {

            string path = "~/../../../../";//保存路径

            string fileName = path + "1.csv";//文件名

            string Datedate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");//年月日小时分钟秒

            if (!Directory.Exists(path))

            {

                Directory.CreateDirectory(path);

            }

            if (!File.Exists(fileName))

            {

                StreamWriter sw = new StreamWriter(fileName, true, Encoding.UTF8);

                sw.Close();

            }

            StreamWriter swl = new StreamWriter(fileName, true, Encoding.UTF8);

            string str = result+"\t\n";

            swl.Write(str);

            swl.Close(); 

        }

一行一个            WriteCsv("Client");

c#截取两个指定字符串中间的字符串

        public static string MidStrEx_New(string sourse, string startstr, string endstr)

        {

             Regex rg = new Regex("(?<=(" + startstr + "))[.\\s\\S]*?(?=(" + endstr + "))", RegexOptions.Multiline | RegexOptions.Singleline);

             return rg.Match(sourse).Value;

        }//c#截取两个指定字符串中间的字符串

  int i = str.IndexOf("\n") + 1;  //  int j = str.IndexOf("ef"); 

                        int j = mat.Index;

                        string sneed = str.Substring(i, j-i-2);

                        yname = sneed;

public static string MidStrEx(string sourse, string startstr, string endstr)

        {

            string result = string.Empty;

            int startindex, endindex;

            try

            {

                startindex = sourse.IndexOf(startstr);

                if (startindex == -1)

                    return result;

                string tmpstr = sourse.Substring(startindex + startstr.Length);

                endindex = tmpstr.IndexOf(endstr);

                if (endindex == -1)

                    return result;

                result = tmpstr.Remove(endindex);

            }

            catch (Exception ex)

            {

                Log.WriteLog("MidStrEx Err:" + ex.Message);

            }

            return result;

        }

C#在csv文件某行插入指定数据或重写数据

FileStream fs = new FileStream(@"demo.txt", FileMode.Open);==

    using (var fs = File.Create("demo.txt")) =

            {

                //初始化文件

                var sw = new StreamWriter(fs);

                var sr = new StreamReader(fs);

                sw.WriteLine("AAAAAA");

                sw.WriteLine("BB");

                sw.WriteLine("CCCC");

                sw.Flush();

                fs.Seek(0, SeekOrigin.Begin);

                //查找2个换行符位置

                long p1 = -1, p2 = -1;

                var last = 0;

                for (int i = 0; i < fs.Length; ++i)

                {

                    var c = fs.ReadByte();

                    if (last == '\r' && c == '\n')

                    {

                        if (p1 == -1) p1 = fs.Position;

                        else

                        {

                            p2 = fs.Position;

                            break;

                        }

                    }

                    last = c;

                }

                //第二个换行符之后的内容,如果是超大文件,分批缓存,避免内存占用过多

                var end = sr.ReadToEnd();

                //重新写入第一个换行符之后的内容

                fs.Seek(p2, SeekOrigin.Begin);

                sw.WriteLine("what is");

                sw.Write(end);

                sw.Close();

            }

在.csv文件中指定字符串后插入

  public static void WriteCsv2(string result)

        {

            string path = "~/../../../../";//保存路径

            string fileName = path + "1.csv";//文件名

            string Datedate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");//年月日小时分钟秒

            if (!Directory.Exists(path))

            {

                Directory.CreateDirectory(path);

            }

            if (!File.Exists(fileName))

            {

                StreamWriter sw2 = new StreamWriter(fileName, true, Encoding.UTF8);

                sw2.Close();

            }

            //初始化文件

            FileStream fs = new FileStream(@"~/../../../../1.csv", FileMode.Open);

            var sw = new StreamWriter(fs);

            var sr = new StreamReader(fs);

            sw.Flush(); 

            var end = sr.ReadToEnd();   //读取全文

            var a = end.IndexOf("Address"); //找到目标位置 应该是邮箱后面的address

            fs.Seek(a+1, SeekOrigin.Begin);//在目标位置偏移后写入

            sw.WriteLine("\t\n"+result);//换行写入

            var zend = end.Substring(a);

            sw.Write(zend);//追加偏移后的全文

            sw.Close();

}

C#循环输出数组的内容for/foreach 规律输出数组第一行012(123) 第二行345(456)

   var list1=nstr.Split("\t\n"); 

                    var list=nstr.Replace("Product\t\n", "").Split("\t\n");

                    var sindex = list1.Length / 4;

                    Console.WriteLine("item #\t Product name\t Description\t List price\t Bidder name\t Bildder emial\t Bid amt\t");

                    for (int i = 0; i < sindex; i++)

                    {

                        Console.WriteLine("{0}\t {1}\t\t {2}\t {3}", i+1,list[3*i],list[3 * i + 1],list[3 * i + 2]);

                    }

 

 

 

序列化

在这之前并不太了解C#的序列化,于是百度一下。

得一百度知道解答: c#中序列化是什么,怎么用,什么情况下用,不用有什么后果?

c#中序列化就是把一个对象保存到一个文件或数据库字段中去。

序列化用途:

1、在进程下次启动时读取上次保存的对象的信息

2、在不同的AppDomain或进程之间传递数据

3、在分布式应用系统中传递数据

常见的序列化的方法:

1、BinaryFormatter

2、SoapFormatter

3、XML序列化

用法:

  BinaryFormatter的用法大致如下: 

//BinaryFormatter将对象序列化到文件中

 List<string> inputList = new List<string>() { "str1","str2","str3"};

 using (FileStream fsWriter = new FileStream(@"tmp.dat",FileMode.Create,FileAccess.Write))

 {

       BinaryFormatter bf = new BinaryFormatter();

       //序列化

       bf.Serialize(fsWriter, inputList);

 }

 //BinaryFormatter将文件中的数据反序列化出来

 List<string> outputList = new List<string>();

 using (FileStream fsReader = new FileStream(@"tmp.dat",FileMode.Open,FileAccess.Read))

 {

       BinaryFormatter bf = new BinaryFormatter();

       //反序列化

       outputList = (List<string>)bf.Deserialize(fsReader);

 }

XML序列化的用法大致如下:

//xml序列化到tmp.xml文件中

List<string> inputList = new List<string>() { "str1","str2"};

using (FileStream fsWriter = new FileStream(@"tmp.xml",FileMode.Create,FileAccess.Write))

{

      XmlSerializer xs = new XmlSerializer(typeof(List<string>));

      xs.Serialize(fsWriter, inputList);

}

//从tmp.xml文件中反序列化出来

List<string> outputList = new List<string>();

using (FileStream fsReader = new FileStream(@"tmp.xml",FileMode.Open,FileAccess.Read))

{

     XmlSerializer xs = new XmlSerializer(typeof(List<string>));

     outputList = xs.Deserialize(fsReader) as List<string>;

}

总结:

两个的用法大致如下:

序列化:

  1.得到一个存储对象的类型

  2.创建一个写入文件流

  3.定义要序列化的类型

  4.调用序列化方法

反序列化:

  1.定义一个装载对象的类型

  2.创建一个读出文件流

  3.定义要反序列化的类型

  4.调用反序列化方法

BinaryFormatter类进行序列化和反序列化,以缩略型二进制格式写到一个文件中去,速度比较快,而且写入后的文件已二进制保存有一定的保密效果。标记为NonSerialized的其他所有成员都能序列化。

采用xml序列化的方式只能保存public的字段和可读写的属性,对于private等类型的字段不能进行序列化。

二进制序列化的优点:

  1. 所有的类成员(包括只读的)都可以被序列化;

  2. 性能非常好。

XML序列化的优点:

  1. 互操作性好;

  2. 不需要严格的二进制依赖;

  3. 可读性强

另外还受助于这片博文C# ArrayList用BinaryFormatter序列化和反序列化进行文件读写的一个简单例子_c# 实例 arraylist 反序列化_JohnZhang_的博客-CSDN博客

c# DataGridView中,选中了多个行,如何获取选中的每一行的数据,或者每一行的索引C#中DataGridView实现多选和单选问题

好像是这样的

foreach(DataGridViewRow row in DataGridView.SelectedRows)

{

MessageBox.Show(row.cell[1].Value.ToString());

}

SelectedRows就是包含了所有选中的行

End

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星尘库

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值