如何在一个语句中将字符串分成两半,分成两个变量?

时间:2018-06-24 02:25:15

标签: ruby string

我想将Encoding : uu Orig : Cat Encoded : b'begin 666 <data>\n#0V%T\n \nend\n' byte UnEncoded: b'Cat' utf8 UnEncoded: Cat Encoding : base-64 Orig : Cat Encoded : b'Q2F0\n' byte UnEncoded: b'Cat' utf8 UnEncoded: Cat 分成两半,并分别分配给strfirst

就像这个伪代码示例:

second

4 个答案:

答案 0 :(得分:3)

class String
  def halves
    chars.each_slice(size / 2).map(&:join)
  end
end

会起作用,但是您将需要调整以处理奇数大小的字符串。

或在线: first, second = str.chars.each_slice(str.length / 2).map(&:join)

答案 1 :(得分:2)

first,second = str.partition(/.{#{str.size/2}}/)[1,2]

说明

您可以使用partition。使用正则表达式模式查找X个字符(在这种情况下为str.size / 2)。

分区返回三个元素;头,火柴和尾巴。因为我们可以匹配任何字符,所以 head 始终是空白字符串。因此,我们只关心 match tail ,因此[1,2]

答案 2 :(得分:2)

def halves(str)
  [str[0, str.size/2], str[str.size/2..-1]]
end

first, second = halves('abcdef')
  #=> ["abc", "def"]
first, second = halves('abcde')
  #=> ["ab", "cde"]

如果确定要使用String#split,则可以(拙劣地)写:

first, second = str.insert(str.size/2, 0.chr).split(0.chr)

答案 3 :(得分:0)

注意:这仅适用于偶数长度的字符串。

沿着伪代码行

first, second = string[0...string.length/2], string[string.length/2...string.length]

如果string是原始字符串。