我想分割这条线:
string line = "First Name ; string ; firstName";
到他们修剪版本的数组中:
"First Name"
"string"
"firstName"
我怎样才能在一条线上完成这一切?以下给了我一个错误“无法转换类型 void”:
List<string> parts = line.Split(';').ToList().ForEach(p => p.Trim());
尝试
List<string> parts = line.Split(';').Select(p => p.Trim()).ToList();
仅供参考,Foreach 方法采用 Action(采用 T 并返回 void)作为参数,并且您的 lambda 以字符串形式返回字符串。Trim 返回字符串
Foreach 扩展方法旨在修改集合中对象的状态。由于字符串是不可变的,这将没有效果
希望它有所帮助;o)
塞德里克
该ForEach
方法不返回任何内容,因此您不能将其分配给变量。
请改用Select
扩展方法:
List<string> parts = line.Split(';').Select(p => p.Trim()).ToList();
.net 5 之后,解决方法很简单:
List<string> parts = line.Split(';', StringSplitOptions.TrimEntries);
因为 p.Trim() 返回一个新字符串。
你需要使用:
List<string> parts = line.Split(';').Select(p => p.Trim()).ToList();
这是一个扩展方法...
public static string[] SplitAndTrim(this string text, char separator)
{
if (string.IsNullOrWhiteSpace(text))
{
return null;
}
return text.Split(separator).Select(t => t.Trim()).ToArray();
}
或者试试这个:
string[] parts = Regex.Split(line, "\\s*;\\s*");
尝试使用正则表达式:
List<string> parts = System.Text.RegularExpressions.Regex.Split(line, @"\s*;\s*").ToList();
拆分返回 string[] 类型。写一个扩展方法:
public static string[] SplitTrim(this string data, char arg)
{
string[] ar = data.Split(arg);
for (int i = 0; i < ar.Length; i++)
{
ar[i] = ar[i].Trim();
}
return ar;
}
我喜欢您的解决方案,所以我决定添加它并使其更可用。
public static string[] SplitAndTrim(this string data, char[] arg)
{
return SplitAndTrim(data, arg, StringSplitOptions.None);
}
public static string[] SplitAndTrim(this string data, char[] arg,
StringSplitOptions sso)
{
string[] ar = data.Split(arg, sso);
for (int i = 0; i < ar.Length; i++)
ar[i] = ar[i].Trim();
return ar;
}
使用正则表达式
string a="bob, jon,man; francis;luke; lee bob";
String pattern = @"[,;\s]";
String[] elements = Regex.Split(a, pattern).Where(item=>!String.IsNullOrEmpty(item)).Select(item=>item.Trim()).ToArray();;
foreach (string item in elements){
Console.WriteLine(item.Trim());
结果:
鲍勃
乔恩
男人
弗朗西斯
卢克
李
鲍勃
解释模式 [,;\s]:匹配出现的 , ; 或空格字符