找到最接近字符250的字符串,然后拆分

时间:2014-01-16 14:35:56

标签: ruby string

所以我有一个非常长的字符串,这是一个电视台电话信件列表。我把它放入的CRM每个字段的字符数限制为250。结果我创建了一些字段。我想将一个字符串拆分为250个字符,然后我想找到最后一次出现的“,”

str = "WPXN, KPXN, WCPX, WPPX, KPXD, KKPX, WBPX, WPXA, WWPX, WPXW, KPXB, WPXD, KPPX, WXPX, KPXM, WPXM, WVPX, KPXC, WOPX, KSPX, KPXG, KPXG-LD, WINP, WIPX, WRPX, WFPX, WNPX, WHPX, KPXE, KUPX, WPXE, KPXL, WPXP, WZPX, WPXH, WPXV, KOPX, WGPX, WPXC, WPXJ-LP, WPXX, WPXJ, WPXQ, WPXL, WQPX, WYPX, WPXK, KTPX, WUPX, WLPX, WPXR, KFPX, KPXO, WSPX, KPXR, WEPX, WTPX"

str[0...250]
# returns "WPXN, KPXN, WCPX, WPPX, KPXD, KKPX, WBPX, WPXA, WWPX, WPXW, KPXB, WPXD, KPPX, WXPX, KPXM, WPXM, WVPX, KPXC, WOPX, KSPX, KPXG, KPXG-LD, WINP, WIPX, WRPX, WFPX, WNPX, WHPX, KPXE, KUPX, WPXE, KPXL, WPXP, WZPX, WPXH, WPXV, KOPX, WGPX, WPXC, WPXJ-LP, WPXX"

# leftover_string = do something here
# returns ", WPXX"

appropriate_length_string = str[0...250].chomp(leftover_string)
longer_string = str[251..-1]
longer_string.insert(leftover_string + ", ",0)
# recusrively run until all strings are in an array or something.

有意义吗?我不知道如何做“在这里做点什么”的部分。

2 个答案:

答案 0 :(得分:1)

使用正则表达式(String#[regexp]):

str[0,250][/,[^,]*$/]
# => ", WPXX"

使用String#rindex

s = str[0,250]
s[s.rindex(',')..-1]
# => ", WPXX"

使用Cary Swoveland建议的String#rpartition替代方案:

str[0,250].rpartition(',')[1..2].join
# => ", WPXX"

答案 1 :(得分:0)

我认为你必须循环或递归。这是一个很有可能得到改进的快速循环示例。

str = "WPXN, KPXN, WCPX, WPPX, KPXD, KKPX, WBPX, WPXA, WWPX, WPXW, KPXB, WPXD, KPPX, WXPX, KPXM, WPXM, WVPX, KPXC, WOPX, KSPX, KPXG, KPXG-LD, WINP, WIPX, WRPX, WFPX, WNPX, WHPX, KPXE, KUPX, WPXE, KPXL, WPXP, WZPX, WPXH, WPXV, KOPX, WGPX, WPXC, WPXJ-LP, WPXX, WPXJ, WPXQ, WPXL, WQPX, WYPX, WPXK, KTPX, WUPX, WLPX, WPXR, KFPX, KPXO, WSPX, KPXR, WEPX, WTPX"

chunk_size = 30
pos1 = 0
pos2 = pos1 + chunk_size
result = []

while pos2 < str.size do
  pos2 = str[pos1..pos2].rindex(",") + pos1
  result << str[pos1..pos2].strip
  pos1 = pos2 + 1
  pos2 += chunk_size
  result << str[pos1..pos2].strip if pos2 > str.size
end

p result