【问题标题】:What is the best character for String.Split?String.Split 的最佳角色是什么?
【发布时间】:2012-04-22 06:45:11
【问题描述】:

免责声明:我知道在 99% 的情况下,您不应“序列化”串联字符串中的数据。

你们在众所周知的情况下使用什么字符:

string str = userId +"-"+ userName;

在大多数情况下,我都退回到 | (管道)但是,在某些情况下,用户甚至会输入。像☼ (ALT+9999) 这样的“不可输入”字符呢?

【问题讨论】:

  • 你能解释一下你为什么这样做吗?闻起来真是个坏主意。
  • 假设我想加密一些数据并使用 HTTP 通过网络将其发送到移动应用程序。我没有时间设置花哨的序列化框架并希望尽快启动并运行......即我做 Context.Write(Encrypt("Param1|Param2|Param3"))
  • 以下是一些使用轮子的说明:c-sharpcorner.com/UploadFile/bipinjoshi/… 抱歉,没时间聊天我要睡觉了。
  • 谁说分隔符必须是单个字符?此外,如果您可以定义 userId 的范围,那么您可以(例如)假设直到第一个“-”之前的所有字符都是 userId,而第一个“-”之后的所有字符都是用户名。不用担心。
  • @Will 我知道 - 有很多方法可以解决这个“问题”,特别是因为它不是最佳实践。我问这个问题的主要原因是看看是否有人以非常健壮的方式“解决”了它(例如:使用 '\u12345' 因为它是最少使用的 Unicode 字符)。至于包含多个字符的分隔符 - 当然可以(喜欢stackoverflow.com/questions/1254577/…)。我只是在寻找可以毫不费力地跨不同平台和编程语言工作的最简单的解决方案 - 都有 String.Split(char)

标签: c# string


【解决方案1】:

这取决于太多因素,无法给出具体答案。

首先,为什么你这样做?如果您觉得需要以这种方式组合 userIduserName 来存储它们,请考虑替代方法,例如CSV 样式的引用或类似的。

其次,在正常情况下,只应使用不属于字符串的分隔符。如果 userId 只是一个数字,那么“-”就可以了……但是如果这个数字可能是负数呢?

第三,这取决于你打算用字符串做什么。如果它只是用于日志记录或调试器或其他形式的人类消费,那么您可以放松一下,只需选择一个看起来合适的分隔符。如果您打算像这样存储数据,请使用分隔符来确保您以后可以正确提取数据,而不管userIduserName 的值如何。如果您可以侥幸成功,请使用 \0 例如。如果任一值来自不受信任的来源(即 Internet),则确保分隔符不能用作任一字符串中的字符。通常,您会限制每个字符包含的字符 - 例如,userId 的数字和 userName 的字母、数字和一些标点符号。

【讨论】:

  • 哼...是的 \0 很好。我并不是在寻找完全万无一失的方法(从提及 - 和 | 中可以明显看出),只是很好奇人们会推荐什么以及他们有什么与此相关的技巧。
【解决方案2】:

如果是用于数据存储和检索,则无法保证用户找不到将分隔符注入字符串的方法。安全的做法是以某种方式预处理输入:

  • - 成为特殊字符
  • 如果在输入中遇到-,请将其替换为-0
  • 使用-- 作为分隔符

所以userid = "alpha-dog"userName = "papa--0bear" 将被翻译成

alpha-0dog--papa-0-00bear

重要的是您的方案必须是完全可撤销的,并且用户不应该能够破坏它,无论他们输入什么。

本质上这是一个非常原始的消毒版本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-25
    • 2010-10-17
    • 1970-01-01
    • 1970-01-01
    • 2018-07-06
    • 2014-03-19
    • 1970-01-01
    • 2016-12-18
    相关资源
    最近更新 更多