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

news2024/9/9 4:55:00

目录

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/714948.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ModaHub魔搭社区:Milvus 数据迁移工具 – MilvusDM

目录 Milvus 数据迁移工具 — MilvusDM 简介 功能介绍 Faiss to Milvus Milvus 数据迁移工具 — MilvusDM 简介 MilvusDM 是一款针对 Milvus 研发的数据迁移工具&#xff0c;支持 Milvus 数据传输以及数据文件的导入与导出&#xff1a; Faiss to Milvus&#xff1a;将未…

基于Transformer视觉分割综述

基于Transformer视觉分割综述 SAM &#xff08;Segment Anything &#xff09;作为一个视觉的分割基础模型&#xff0c;在短短的 3 个月时间吸引了很多研究者的关注和跟进。如果你想系统地了解 SAM 背后的技术&#xff0c;并跟上内卷的步伐&#xff0c;并能做出属于自己的 SAM…

获取齐治堡垒机任意用户登录权限

他一个人呆呆地坐在禾场边上&#xff0c;望着满天的星星&#xff0c;听着小河水朗朗的流水声&#xff0c;陷入了一种说不清楚的思绪之中。这思绪是散乱而飘浮的&#xff0c;又是幽深而莫测的。他突然感觉到&#xff0c;在他们这群山包围的双水村外面&#xff0c;有一个辽阔的大…

spring之BeanFactory

spring之BeanFactory DefaultListableBeanFactory示例代码类继承实现结构 BeanFactory是Bean工厂&#xff0c;所以很明显&#xff0c;BeanFactory会负责创建Bean&#xff0c;并且提供获取Bean的API。 DefaultListableBeanFactory 在Spring源码中&#xff0c;BeanFactory接口存…

ULTRAMAT 23红外气体分析仪

后面板接口图 485通信接口 7脚和9脚 模拟量接口 选装接口 635430034211014569720.pdf (chem17.com)https://img64.chem17.com/2/20140807/635430034211014569720.pdf 特此记录 anlog 2023年7月3日

redis从零开始(6)----分布式锁

场景 修改时&#xff0c;经常需要先将数据读取到内存&#xff0c;在内存中修改后再存回去。在分布式应用中&#xff0c;可能多个进程同时执行上述操作&#xff0c;而读取和修改非原子操作&#xff0c;所以会产生冲突。增加分布式锁可以解决这个问题 基本原理 同步锁&#xf…

14.PWM输出

1.通用定时器PWM概述&#xff1a; 2.PWM工作过程&#xff1a; 2.PWM模式1&PWM模式2&#xff1a; 3.向上计数配置&#xff1a; 4.PWM模式&#xff1a; 5.自动重载的预装载寄存器&#xff1a; 6.STM32定时器3输出通道引脚&#xff1a; 7.PWM输出库函数&#xff1a; PWM输出…

java 单元测试覆盖率调研

1、覆盖率工具对比 根据网上的资料搜索发现&#xff0c;现在常用的 java 单元测试覆盖率工具主要有&#xff1a; EmmaCoberturaJacocoClover(商用&#xff09; 工具JacocoEmmaCobertura原理使用 ASM 修改字节码修改 jar 文件&#xff0c;class 文件字节码文件基于 jcoverage,…

Squid代理服务器配置及CDN简介

Squid代理服务器配置及CDN简介 一、Squid介绍1、代理的工作机制2、代理服务器的概念3、代理服务器的作用4、Squid代理的类型 二、Squid搭建1、安装Squid服务2、构建传统代理服务器3、构建透明代理服务器4、ACL访问控制5、Squid日志分析6、Squid反向代理 三、CDN1、CDN简介2、CD…

vue项目打包后css js 加载不进来,路径不对的问题

问题描述&#xff1a;本地运行都是正常的&#xff0c;打包后出现css js 加载不进来&#xff0c;路径不对&#xff0c;接口调用地址不对出现undefined字段&#xff0c;如图&#xff1a; 网上差了很多资料&#xff0c;试了很多方法都不行&#xff0c;也有说是 publicPath: ./ 配置…

【Matlab】智能优化算法_正余弦优化算法SCA

【Matlab】智能优化算法_正余弦优化算法SCA 1.背景介绍2.数学模型3.文件结构4.详细代码及注释4.1 func_plot.m4.2 Get_Functions_details.m4.3 initialization.m4.4 main.m4.5 SCA.m 5.运行结果6.参考文献 1.背景介绍 尽管需要更多的函数评估&#xff0c;但文献表明&#xff0c…

【花雕】全国青少年机器人技术一级考试试卷(实操真题之三)

随着科技的不断进步&#xff0c;机器人技术已经成为了一个重要的领域。在这个领域中&#xff0c;机械结构是机器人设计中至关重要的一部分&#xff0c;它决定了机器人的形态、运动方式和工作效率。对于青少年机器人爱好者来说&#xff0c;了解机械结构的基础知识&#xff0c;掌…

MyBatis-Plus学习3 Wrapper条件构造器

组装查询Wrapper Testpublic void test01() {// 查询用户名包含a&#xff0c;年龄在20-30之间&#xff0c;邮箱信息不为null的用户信息QueryWrapper<User> queryWrapper new QueryWrapper<>();queryWrapper.like("name", "a").between("…

Linux Shell脚本中的变量和流程控制

Linux Shell脚本中的变量和流程控制 Linux Shell脚本是一种方便的自动化工具&#xff0c;它可以帮助我们完成各种复杂任务。在本文中&#xff0c;我们将详细介绍Shell脚本中的变量和流程控制语句&#xff0c;以及如何使用它们编写高效、可读性强的脚本。 变量 在Shell脚本中&…

【LeetCode热题100】打卡第31天:买卖股票的最佳时机二叉树中的最大路径和

文章目录 【LeetCode热题100】打卡第31天&#xff1a;买卖股票的最佳时机&二叉树中的最大路径和⛅前言 买卖股票的最佳时机&#x1f512;题目&#x1f511;题解 二叉树中的最大路径和&#x1f512;题目&#x1f511;题解 【LeetCode热题100】打卡第31天&#xff1a;买卖股票…

Hello Vue3

一、为什么要学vue3 vue官网&#xff1a;https://cn.vuejs.org/api/ 这是vue官网的简介&#xff0c;说vue2在23年年底就停止维护了&#xff0c;将来会拥抱vue3,这是事务发展的一个必然趋势。 二、vue3相比于vue2做了哪些方面的改进和优化 以下是Vue3相比于Vue2的一些改进和…

DAY37:贪心算法(四)跳跃游戏+跳跃游戏Ⅱ

文章目录 55.跳跃游戏思路完整版总结 45.跳跃游戏Ⅱ思路完整版为什么next覆盖到了终点可以直接break&#xff0c;不用加上最后一步逻辑梳理 总结 55.跳跃游戏 给定一个非负整数数组 nums &#xff0c;你最初位于数组的 第一个下标 。 数组中的每个元素代表你在该位置可以跳跃…

weui 密码二次检查校验

检验规则里rules[]增加: equalTo:需要匹配一致的字段名 我这第一个密码是&#xff1a;USR_PWD&#xff0c;第二个密码是&#xff1a;USR_PWD2,让第二个等于第一个就可以了&#xff1a; equalTo:USR_PWD 效果&#xff1a;

MIT 6.S081 教材第七章内容 -- 调度 --下

MIT 6.S081 教材第七章内容 -- 调度 -- 下 引言调度多路复用代码&#xff1a;上下文切换代码&#xff1a;调度代码&#xff1a;mycpu和myprocsleep与wakeup代码&#xff1a;sleep和wakeup代码&#xff1a;Pipes代码&#xff1a;wait, exit和kill真实世界练习 引言 MIT 6.S081 …

0基础学习VR全景平台篇 第54篇: 高级功能-皮肤

功能位置示意 一、本功能将用在哪里&#xff1f; 皮肤功能&#xff0c;摆脱传统VR全景展示样式&#xff0c;自行选择场景与全景分组的界面模板&#xff0c;从而与不同的应用行业风格相互适应&#xff0c;达到最贴切的展示效果。 是在各种风格的VR全景作品中&#xff0c;最快实…