如何从文件名数组中删除数字扩展名?

时间:2016-03-11 01:05:38

标签: arrays ruby string

我想删除数组中字符串的最后11个字符。该数组是:

["cool.mp3?3829483927", "wow.mp3?3872947629", "woa.mp3?8392748308"]

我想将字符串转换为:

["cool.mp3", "wow.mp3", "woa.mp3"]

在Ruby中是否有专门针对此的方法?我知道chop和chomp,但没有任何东西可以访问数组中的每个字符串。

5 个答案:

答案 0 :(得分:3)

TL; DR

有很多方法可以转换你的字符串,包括#slice,#split,#sub和#partition等等。您真正缺少的是Array#map方法,它将方法或块应用于数组的每个元素。

对文件名进行分区

修改数组元素的一种方法是将Enumerable#partition方法映射到每个元素上,然后将文件名拆分为一个组件数组。通常,这将返回一个数组数组,其中每个分区字符串都是一个子数组,但您可以让#map块返回您想要的组件。在这种情况下,您想要的是每个分区数组的第一个元素。

这可能听起来很复杂,但实际上非常简单。例如:

files = %w(cool.mp3?3829483927 wow.mp3?3872947629 woa.mp3?8392748308)
files.map { |f| f.partition(??)[0] }
#=> ["cool.mp3", "wow.mp3", "woa.mp3"]

缩小版

如果您认为紧凑性超出可读性,您可以获得与上述解决方案相同的结果:

for (var i=0; i < result.length; i++){
                    var a = Array();// loop against the Data array on each object in result
                    var b = Array();
                    a.push(result[i].data.mentionTotal);
                    b.push(result[i].profileName);
                    mentionArr.push(b+a);
                 }

答案 1 :(得分:1)

如果总是11个字符,你可以这样做:

arr=["cool.mp3?3829483927","wow.mp3?3872947629", "woa.mp3?8392748308"]
new=arr.map{|thing| thing[0...-11]}

答案 2 :(得分:1)

如果您想要第一个'?'之前的内容,请执行以下操作:

arr.map{|thing| thing.split('?')[0]}

答案 3 :(得分:0)

String::slice可以将正则表达式作为参数,因此您可以提取所需的名称(而不是删除最后11个字符):

arr = ["cool.mp3?3829483927","wow.mp3?3872947629", "woa.mp3?8392748308"]
arr.map! {|x| x.slice(/\w+\.mp3/) }    
#=> ["cool.mp3", "wow.mp3", "woa.mp3"]

答案 4 :(得分:0)

如果arr是您的字符串数组:

arr.map { |s| s[/[^?]+/] }
  # => ["cool.mp3", "wow.mp3", "woa.mp3"] 

正则表达式/[^?]+/匹配一个或多个不是(字符类开头的^)问号的字符。这使用方法Array#mapString#[]