我想把这条线分开:
string line = "First Name ; string ; firstName";
转换成一个裁剪版本的数组
"First Name" "string" "firstName"
**如何在一行中完成所有这些操作?**下面的代码给我一个错误“cannot convert type void”:
List<string> parts = line.Split(';').ToList().ForEach(p => p.Trim());
lx0bsm1f1#
试试看
List<string> parts = line.Split(';').Select(p => p.Trim()).ToList();
仅供参考,Foreach方法接受Action(接受T并返回void)作为参数,并且lambda将字符串作为string返回。Trim将返回字符串Foreach扩展方法用于修改集合中对象的状态。由于字符串是不可变的,因此这不会产生任何效果
jecbmhm32#
ForEach方法不返回任何值,因此不能将其赋给变量。请改用Select扩展方法:
ForEach
Select
yvfmudvl3#
在.net 5之后,解决方案就像这样简单:
List<string> parts = line.Split(';', StringSplitOptions.TrimEntries);
jm81lzqq4#
因为p.Trim()返回一个新字符串。您需要用途:
ehxuflar5#
这里有一个扩展方法...
public static string[] SplitAndTrim(this string text, char separator) { if (string.IsNullOrWhiteSpace(text)) { return null; } return text.Split(separator).Select(t => t.Trim()).ToArray(); }
xyhw6mcr6#
或者试试这个:
string[] parts = Regex.Split(line, "\\s*;\\s*");
e1xvtsh37#
尝试使用正则表达式:
List<string> parts = System.Text.RegularExpressions.Regex.Split(line, @"\s*;\s*").ToList();
sbdsn5lh8#
拆分返回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; }
ftf50wuq9#
使用正则表达式
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());
结果:摆锤乔恩人Francis卢克背风面摆锤解释模式[,; \s]:匹配、;或空格字符
9条答案
按热度按时间lx0bsm1f1#
试试看
仅供参考,Foreach方法接受Action(接受T并返回void)作为参数,并且lambda将字符串作为string返回。Trim将返回字符串
Foreach扩展方法用于修改集合中对象的状态。由于字符串是不可变的,因此这不会产生任何效果
jecbmhm32#
ForEach
方法不返回任何值,因此不能将其赋给变量。请改用
Select
扩展方法:yvfmudvl3#
在.net 5之后,解决方案就像这样简单:
jm81lzqq4#
因为p.Trim()返回一个新字符串。
您需要用途:
ehxuflar5#
这里有一个扩展方法...
xyhw6mcr6#
或者试试这个:
e1xvtsh37#
尝试使用正则表达式:
sbdsn5lh8#
拆分返回string[]类型,编写扩展方法:
我喜欢你的解决方案,所以我决定添加到它,使它更可用。
ftf50wuq9#
使用正则表达式
结果:
摆锤
乔恩
人
Francis
卢克
背风面
摆锤
解释模式[,; \s]:匹配、;或空格字符