gpt4 book ai didi

ruby - 拆分字符串抑制所有空字段

转载 作者:数据小太阳 更新时间:2023-10-29 06:52:15 33 4
gpt4 key购买 nike

我想拆分一个抑制所有空字段的字符串

命令:

",1,2,,3,4,,".split(',')

结果:

["", "1", "2", "", "3", "4", ""]

预期:

["1", "2", "3", "4"]

如何做到这一点?


编辑

好的。只是总结所有发布的好问题。

我想要的是 split 方法(或其他方法)不生成空字符串。看起来这是不可能的。

因此,解决方案是两步过程:像往常一样拆分字符串,然后以某种方式从结果数组中删除空字符串。

第二部分正是this question(及其 duplicate )

所以我会用

",1,2,,3,4,,".split(',').delete_if(&:empty?) 

Nikita Rybak 和 user229426 提出的解决方案是使用 reject 方法。根据docs拒绝返回一个新数组。同时delete_if方法更有效,因为我不需要副本。使用select Mark Byers 提出的效率更低。

steenslag 提议用空格代替逗号,然后用空格分割:

",1,2,,3,4,,".gsub(',', ' ').split(' ')

实际上,the documentation说空间实际上是一个空白。但是“split(/\s/)”和“split(' ')”的结果是不一样的。这是为什么?

Mark Byers 提出了另一种解决方案——只使用正则表达式。好像这就是我需要的。但是这个解决方案意味着您必须精通正则表达式。但这是很好的解决方案!例如,如果我需要空格作为分隔符以及任何非字母数字符号,我可以将其重写为

",1,2, ,3 3,4 4 4,,".scan(/\w+[\s*\w*]*/)

结果是:

["1", "2", "3 3", "4 4 4"]

但是正则表达式非常不直观,需要经验。

总结

我希望拆分与空格一起使用,就好像空格是逗号甚至正则表达式一样。我希望它不会产生空字符串。我认为这是 ruby​​ 中的错误或我的误解。

将其设为社区问题。

最佳答案

有一个 reject Array 中的方法:

",1,2,,3,4,,".split(',').reject { |s| s.empty? }

或者如果您更喜欢Symbol#to_proc:

",1,2,,3,4,,".split(',').reject(&:empty?)

关于ruby - 拆分字符串抑制所有空字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3774518/

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