gpt4 book ai didi

c# - 如何拆分可能包含分隔符的用户生成的字符串?

转载 作者:太空宇宙 更新时间:2023-11-03 17:36:53 25 4
gpt4 key购买 nike

我想使用逗号作为分隔符对以下字符串进行 String.Split():

John,Smith,123 Main Street,212-555-1212

以上内容由用户输入。如果他们在地址中输入逗号,则生成的字符串会导致 String.Split() 出现问题,因为您现在有 5 个字段而不是 4 个:

John,Smith,123 Main Street, Apt 101,212-555-1212

我可以在所有用户输入上使用 String.Replace() 将逗号替换为其他内容,然后再次使用 String.Replace() 将内容转换回逗号:

value = value.Replace(",", "*");  

但是,如果用户碰巧在他们的输入中使用占位符定界符“*”,这仍然可能被愚弄。然后你会得到额外的逗号并且结果中没有星号。

我在网上看到了处理转义分隔符的解决方案,但我还没有找到针对这种看似常见情况的解决方案。我错过了什么?

编辑:这叫做 delimitter collision .

最佳答案

这是一个常见的场景——您有一些任意的字符串值,您希望将它们组合成一个结构,该结构本身就是一个字符串,但不允许这些值干扰它们周围结构中的分隔符。

您有多种选择:

  1. 输入限制:如果您的方案可以接受,最简单的解决方案是限制在值中使用分隔符。在您的特定情况下,这意味着不允许使用逗号。
  2. 编码:如果输入限制不合适,下一个最简单的选择是对整个输入值进行编码。选择一种在其可能输出范围内没有分隔符的编码(例如,Base64 在其编码输出中不包含逗号)
  3. 转义分隔符:一个稍微复杂一点的选择是提出一个转义分隔符的约定。如果您正在使用像 CSV 这样的主流软件,那么转义问题很可能已经解决,并且有一个标准库可供您使用。如果没有,那么就需要花些时间想出一个完整的转义系统,并实现它。

如果您可以灵活地不使用 CSV 来表示您的数据,这将打开许多其他选项。 (例如,考虑参数化 SQL 查询通过将参数值与查询字符串分开存储来避免输入转义的复杂性的方式。)

关于c# - 如何拆分可能包含分隔符的用户生成的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1448927/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com