【问题标题】:Split String results in uneven array item lengths due to trailing delimiters由于尾随分隔符,拆分字符串导致数组项长度不均匀
【发布时间】:2012-09-10 04:08:20
【问题描述】:

通常,当您拆分 Hi,One,Two 之类的字符串时,您将返回 3 个分隔项。

但是,当您需要在最后一项 Hi,One,Two, 上添加额外的逗号时,您将获得 4 项。

我将一个字符串拆分成一个字符串数组,发现数组项长度不均匀,因为字符串末尾有额外的分隔符:

string test = "[one]\t\t\t[two]\t\t\t";
string[] testArr = test.Split(new char[] { '\t' }, StringSplitOptions.None);

结果:

[0] = "[一个]"
[1] = ""
[2] = ""
[3] = “[二]”
[4] = ""
[5] = ""
[6] = ""

有没有什么办法不用为除最后一个段之外的所有段添加第四个逗号?

编辑:

当然,我可以轻松使用此代码:

string test = "[one]\t\t\t\t[two]\t\t\t";
string[] testArr = test.Split(new char[] { '\t' }, StringSplitOptions.None);

并得到理想的结果:

[0] = "[一个]"
[1] = ""
[2] = ""
[3] = ""
[4] = “[二]”
[5] = ""
[6] = ""
[7] = ""

出于这个问题之外的目的,我希望我可以有相等的尾随分隔符,而不是调整字符串以使最后一个字符串的尾随逗号减少。

【问题讨论】:

  • 您希望忽略所有空条目吗?您可以将 StringSplitOptions.None 更改为 StringSplitOptions.RemoveEmptyEntries msdn.microsoft.com/en-us/library/system.stringsplitoptions.aspx
  • 不,但是谢谢...在我的问题中,这就是为什么我明确指定接受 StringSplitOptions 的 String.Split 重载。我不能使用 RemoveEmptyEntries,因为我需要尾随逗号进行另一个操作/计算,我想我将不得不放入第四个逗号,除非有人知道其他技巧。嗯,也许我应该除以[,然后计算逗号。
  • 我不是反对者,但问题并没有真正的意义——如果那里没有逗号,你为什么要期待第四个元素?为什么那里没有逗号?这个字符串是从哪里来的?只需用另一个逗号构建它...?

标签: c# arrays string split


【解决方案1】:

有没有办法不必为所有段添加第四个逗号 除了最后一个?

String.Split 可以正常工作,因此您需要另一个逗号来为字符串生成额外的索引。你有两个选择

  1. 在你前面加上逗号Split
  2. Split之后添加一个空元素

我希望您没有在问题中包含更多内容。

例如,您是否加入了[one],,,[two],,,?如果你是,那么你想用逗号分隔符加入它们,呈现[one],,,,[two],,,(注意额外的逗号)。尝试早点插入逗号。

最大的问题是您为什么要在数组中携带空字符串?使用列表,如果需要,插入额外的字符串。当您真正需要它们时,只需将字符串添加到列表中,而不是携带空的。或者使用对象而不是字符串集合。

【讨论】:

  • 谢谢柯克,逗号对我来说是一个糟糕的例子,它们实际上是这个应用程序中的标签。我需要选项卡来表示填充节点的树视图,以便结构适合表格。我将调整字符串。
【解决方案2】:

我不想做这个代码,我不能去掉逗号 结束:

使用string.TrimEnd 删除尾随逗号,然后稍后根据逗号拆分字符串。

string test = "[one],,,,[two],,,";
test = test.TrimEnd(',');
string[] testArr = test.Split(new char[] { ',' }, StringSplitOptions.None);

或者在一个语句中:

    string[] testArr2 = "[one],,,,[two],,,"
                               .TrimEnd(',')
                               .Split(new char[] { ',' }, StringSplitOptions.None);

根据您编辑的问题,您当前的代码应该会为您提供您正在寻找的结果。看下面的截图

【讨论】:

  • @JeremyThompson,我有点困惑,您当前的代码为您提供了确切的理想结果?你有什么遗漏吗,让我在我的答案中添加截图
  • 感谢我们在同一页上。您是否知道在不调整字符串的情况下使用字符串 [one],,,[two],,, 获取该输出。
  • @JeremyThompson,我没有对我编辑的答案中的字符串做任何事情,看截图,它是你的代码,我只是向你展示调试的输出,它与理想结果相同
  • +1 感谢您的帮助 。我将通过[ 调整字符串或分隔符并计算逗号。我正在尝试做一些开箱即用不支持的事情。
【解决方案3】:
string test = "[one]\t\t\t[two]\t\t\t";
string[] arrUnEven = test.Split(new char[] { '\t' }, StringSplitOptions.None);

test = test.TrimEnd(new char[] { '\t' });
test = test + new String( '\t',2);
string[] arrEven = test.Split(new char[] { '\t' }, StringSplitOptions.None);

【讨论】:

    猜你喜欢
    • 2019-02-17
    • 2016-10-10
    • 2021-12-23
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 2020-03-11
    • 2020-08-24
    • 1970-01-01
    相关资源
    最近更新 更多