我如何才能分割和修剪一个部分的字符串所有在一条线上?

我想把这条线分开:

string line = "First Name ; string ; firstName";

变成一系列修剪过的版本:

"First Name"
"string"
"firstName"

如何在一行上完成这些操作? 下面给出了一个错误“ can not change type void”:

List<string> parts = line.Split(';').ToList().ForEach(p => p.Trim());
117481 次浏览

试试看

List<string> parts = line.Split(';').Select(p => p.Trim()).ToList();

仅供参考,Foreach 方法接受一个 Action (接受 T 并返回 void)作为参数,您的 lambda 返回一个字符串作为字符串。修剪返回字符串

Foreach 扩展方法用于修改集合中对象的状态。因为字符串是不可变的,所以这不会有任何效果

希望能有所帮助

塞德里克

ForEach方法不返回任何内容,因此不能将其赋给变量。

改用 Select扩展方法:

List<string> parts = line.Split(';').Select(p => p.Trim()).ToList();

因为 p.Trim ()返回一个新字符串。

你需要使用:

List<string> parts = line.Split(';').Select(p => p.Trim()).ToList();

或者试试这个:

string[] parts = Regex.Split(line, "\\s*;\\s*");

这里有一个扩展方法..。

    public static string[] SplitAndTrim(this string text, char separator)
{
if (string.IsNullOrWhiteSpace(text))
{
return null;
}


return text.Split(separator).Select(t => t.Trim()).ToArray();
}

尝试使用正则表达式:

List<string> parts = System.Text.RegularExpressions.Regex.Split(line, @"\s*;\s*").ToList();

使用正则表达式

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());

结果:

Bob

Jon

伙计

Francis

Luke

Lee

Bob

解释模式[ ,; s ] : 匹配,; 或空格字符的一个匹配项

Split 返回 string [] type。编写一个扩展方法:

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;
}

在.net5之后,解决方案非常简单:

List<string> parts = line.Split(';', StringSplitOptions.TrimEntries);