目录
C#用空格分隔的字符串string转换成字符数组string[];字符串数组string[]转换成整型数组int[]
1、将用console.readline()获取的用空格分隔的string转换成string[]
C#循环输出数组的内容for/foreach 规律输出数组第一行012(123) 第二行345(456)
c# DataGridView中,选中了多个行,如何获取选中的每一行的数据,或者每一行的索引C#中DataGridView实现多选和单选问题
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就是包含了所有选中的行