我有一个字符串:
str='SA201406005/007/009/010'
如何获得此结果?
['SA201406005','SA201406007','SA201406009', 'SA201406010']
此代码有效:
arr=[]
arr=str.split(/\//)
arr=arr[1..-1].map{|x|x=arr[0].slice(0,arr[0].size-arr[-1].size)+x}.unshift(arr[0])
有更简单的方法吗?
答案 0 :(得分:6)
a = str.split("/")
a.map{|s| s.rjust(a.first.length, a.first)}
# => ["SA201406005", "SA201406007", "SA201406009", "SA201406010"]
答案 1 :(得分:2)
此代码不对基数或其任何后缀的长度做出假设:
def apply_suffixes(s)
base, *suffixes = s.split("/")
[base] + suffixes.map do |suffix|
base[0...-suffix.length] + suffix
end
end
p apply_suffixes("SA201406005/007/009/010")
# => ["SA201406005", "SA201406007", "SA201406009", "SA201406010"]
一个有趣的部分是:
base, *suffixes = s.split("/")
同样有趣:
0...-suffix.length
" ..." operater产生的范围不包括其最大值。 0...-suffix.length
相当于0..(-suffix.length-1)
。
答案 2 :(得分:1)
这个怎么样:
str = 'SA201406005/007/009/010'
prefix, suffixes = str[0..7], str[8..-1]
suffixes.split('/').map { |s| prefix + s }
# => ["SA201406005", "SA201406007", "SA201406009", "SA201406010"]
它假定前缀总是8个字符。