将字符串拆分为数组,删除空格

6

我有一个关于字符串分割的问题。我想要分割字符串,但是当字符串中出现字符 "" 时,不要进行分割并移除空格。

我的字符串:

String tmp = "abc 123 \"Edk k3\" String;";

结果:

1: abc
2: 123
3: Edkk3  // don't split after "" and remove empty spaces
4: String

这是我的代码结果,但我不知道如何去掉 "" 中的空格。

var tmpList = tmp.Split(new[] { '"' }).SelectMany((s, i) =>
                {
                    if (i % 2 == 1) return new[] { s };
                    return s.Split(new[] { ' ', ';' }, StringSplitOptions.RemoveEmptyEntries);
                }).ToList();

然而这并没有看到“”,所以它会将所有内容分割开来。

string[] tmpList = tmp.Split(new Char[] { ' ', ';', '\"', ',' }, StringSplitOptions.RemoveEmptyEntries);
3个回答

8
添加 .Replace(" ","")
String tmp = @"abc 123 ""Edk k3"" String;";
var tmpList = tmp.Split(new[] { '"' }).SelectMany((s, i) =>
{
    if (i % 2 == 1) return new[] { s.Replace(" ", "") };
    return s.Split(new[] { ' ', ';' }, StringSplitOptions.RemoveEmptyEntries);
}).ToList();

0

你可以使用正则表达式。不需要分割,只需指定要保留的内容。

例如:

string tmp = "abc 123 \"Edk k3\" String;";

MatchCollection m = Regex.Matches(tmp, @"""(.*?)""|([^ ]+)");

foreach (Match s in m) {
  Console.WriteLine(s.Groups[1].Value.Replace(" ", "") + s.Groups[2].Value);
}

输出:

abc
123
Edkk3
String;

0

string.Split 不适合你想做的事情,因为你无法告诉它忽略 " 中的内容。

我也不会选择 Regex,因为这可能会变得复杂和占用内存(对于长字符串)。

实现自己的解析器 - 使用状态机来跟踪是否在引号部分内。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接