【问题标题】:Concatenate and split strings连接和拆分字符串
【发布时间】:2014-05-15 15:45:05
【问题描述】:

也许这是一个愚蠢的问题。但我还没有找到答案。 我有一些字符串。我想连接它们,然后在不同的时刻拆分结果字符串。我想知道.NET Framework 中是否有可用的东西。 String 的 Join 和 Split 方法工作得很好。问题是转义分隔符。

例如,我想使用“@”作为分隔符。如果我有“String1”、“Str@ing2”和“String3”,我想获得“String1@Str@@ing2@String3”。

有什么东西可以满足我的需要还是我必须编写自己的函数?

谢谢。

【问题讨论】:

  • 您是否会遇到可能导致两个 @ 紧挨着的空字符串?
  • 您应该使用 CSV 库吗?
  • @ChrisHaas,我可以避免这种情况。没有 CSV 库。

标签: c# .net string escaping


【解决方案1】:

只需在进入的过程中避开分隔符即可。

var inputs = ["String1", "Str@ing2", "String3"];
var joined = string.Join(inputs.Select(i => i.Replace("@", "@@"));

然后您可以拆分为单个 @ 字符。

var split = Regex.Split(joined, "(?<!@)@(?!@)");

这使用零宽度负向后看/向前看patterns 来断言@ 之前和之后的字符不是另一个@。但是,您应该在 @ 位于输入字符串的开头或结尾的情况下运行一些测试。

【讨论】:

  • @ufo - 分裂时你想发生什么?
  • 只在出现一个“@”时才拆分。您的最后一次编辑似乎回答了我的问题。谢谢。
  • 如果输入之一是“@”,Regex.Split 将不起作用。我该如何处理这种情况?
  • @ufo,首先,您是否认为作为人类,您绝对可以使用转义技术确定正确的字段分隔。例如,字符串@@@ 的“拆分”是什么?是四个空字符串、一个空字符串和一个@ 字符串等等...您可能需要设计一个不同的场景。看看现有的转义系统是如何工作的,比如 URL 编码。
  • 你是对的。这就是为什么我更喜欢框架解决方案的原因。我想已经开发了一个经过验证的解决方案。无论如何,在我的场景中,不允许使用空字符串,因此您的示例从未得到验证。
【解决方案2】:

在将每个字符串传递给.Join之前调用.Replace("@", "@@")

【讨论】:

    猜你喜欢
    • 2011-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-16
    • 2014-10-27
    • 1970-01-01
    • 2018-04-13
    • 1970-01-01
    相关资源
    最近更新 更多