Ruby [已解决]Ruby 字符串的处理方法?

joezhang · 2015年05月27日 · 最后由 dandananddada 回复于 2015年05月28日 · 3391 次阅读

举例说明,如果有以下字符串(......代表任意值)以;作为间隔,有没有什么好办法把其中重复的部分(AAA,CC)去掉? "AAA;BBBB;AAA;CC;......;AAA;......;CC;..." 我目前的做法是遍历整个字符串,分解为数组["AAA","BBBB","AAA","CC",......,"AAA",......,"CC",......] 然后遍历数组去掉重复的部分再组合成字符串,感觉这样的处理很不优雅。 谢谢大家!

解决方案: string.split(";").uniq.join(";")

Array#uniq

2.2.1 :001 > a = "AAA;BBBB;AAA;CC;AAA;CC"
 => "AAA;BBBB;AAA;CC;AAA;CC"
2.2.1 :002 > a.split(";").uniq.join(";")
 => "AAA;BBBB;CC"

还要怎么优雅...

str.split(";").uniq!

#3 楼 @although2013 你这样出来是个数组啦,楼主要字符串

#4 楼 @blacktulip 是的,你回的好快...

@rei @blacktulip @although2013 非常谢谢大家的回复!

@rei @blacktulip @although2013 引申出一个问题,如果字符串"AAA;BBBB;AAA;CC;......;AAA;......;CC;..."在首位的位置有空格,怎么处理(不能去掉所有空格,因为空格在字符串中间是合法的,比如“BB BB”)? 比如:"AAA;BBBB; AAA;CC;......;AAA;......;CC;..." ..............................^在这里有个空格,就变成 "AAA;BBBB; AAA;CC;"

@rei 谢谢了,是我没仔细看文档,一直以为 strip 是去掉所有空格。

#2 楼 @blacktulip 变成数组后再转成字符串

1 while str.sub!(/(\b[^;]+;)(.*)(\1)/, '\1\2')

楼主这种善于总结分享、回馈社区的精神值得赞扬

#9 楼 @joezhang strip 是去掉头尾空格

需要 登录 后方可回复, 如果你还没有账号请 注册新账号