【问题标题】:Splitting String with exception?拆分字符串异常?
【发布时间】:2016-02-04 04:19:59
【问题描述】:

我有这样的字符串

string text = "224|3|0|0|0|0|0|0|0|0|0|0|0|0|2|You go back to meet the person from the Future.|1|You will be moved.|82|0|0|0|0|0|0|0|0|0|0|0|0|0|0|81|0|0|0|";

如何拆分“|”这个管道字符有异常,所以结果将是这样的 3 部分?

22430000000000002
You go back to meet the person from the Future.|1|You will be moved.
820000000000000081000

我试过了:

string[] line = text.Split('|');
Console.Write(line[0]); //until line[15] For print section #1 

Console.Write(line[line.length-2]); //until line[line.length-20] For print section #3

文本是动态的,所以也许在第 2 节它会是

You go back to meet the person from the Future.|1|You will be moved.|2|Hello

因此,当索引达到 [16] 时,文本不会被拆分,直到 line.length-20 这可能吗 ? 谢谢!!

【问题讨论】:

  • 不能为内部文本选择不同的分隔符吗?数字分隔符的数量(文本的左侧和右侧)是否固定?
  • 或者可能使用 JSON 格式存储数据,| 用作文本消息中的字段占位符。
  • 更结构化的格式是要走的路。
  • 同意马丁。如果您可以为内部文本选择不同的选择器,例如 224&3&0&0&0&0&0&0&0&0&0&0&0&0&2|你回去会见来自未来的人。!1!你会被感动。|82&0&0&0&0&0&...然后拆分将是一个快照。
  • @user3409182 根本不要使用Split - 如果您将分隔符也用作数据,它将无法可靠地工作。使用正则表达式查找 15 个| 分隔的数字字段、一个随机文本字段以及最后的许多其他字段。或者,或者,使用更好的存储格式,如 JSON(如果您可以将所有数据行转换为新格式)。使用 JSON(甚至是不同的分隔符)会让你的工作变得简单很多。

标签: c# arrays string split string-length


【解决方案1】:

有点做作,但假设您想将内部字母与外部数字分开:

string text = "224|3|0|0|0|0|0|0|0|0|0|0|0|0|2|You go back the person from the Future.|1|You will be moved.|82|0|0|0|0|0|0|0|0|0|0|0|0|0|0|81|0|0|0|";

var first = String.Join("", text.TakeWhile(c => Char.IsDigit(c) || c == '|'));

var third = String.Join("", text.Reverse().TakeWhile(c => Char.IsDigit(c) || c == '|').Reverse());

var second = text.Replace(first, "").Replace(third, "");

【讨论】:

  • 这是一个非常人为的解决方案(尽管它确实有效)。我绝对不建议这样做。
  • @xxbbcc 这个解决方案对我有用,为什么不推荐这个解决方案? (我是 C# 的新手)
  • @w.b 你能逐行解释你的代码,除了文本变量吗?这个解决方案对我有用,但我只想知道细节:)
  • @user3409182 - 在 msdn 上查看 Enumerable.TakeWhilemsdn.microsoft.com/en-us/library/vstudio/…
  • @user3409182 它使用 LINQ 分隔包含数字或 | 字符的第一部分,然后使用相同的方法分隔最后一部分 - 它必须反转两次,因为这次它向后搜索,并且从原文中减去这些部分得到中间部分。
猜你喜欢
  • 2023-03-29
  • 1970-01-01
  • 1970-01-01
  • 2015-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-26
  • 1970-01-01
相关资源
最近更新 更多