如何在一定位置后将字符串拆分为2个部分

the*_*sis 14 ruby ruby-on-rails

例如,我有一些随机字符串:

str = "26723462345"
Run Code Online (Sandbox Code Playgroud)

我希望在第6个字符之后将它分成两部分.怎么做到这一点?

谢谢!

Yul*_*ule 33

这应该做到这一点

[str[0..5], str[6..-1]]
Run Code Online (Sandbox Code Playgroud)

要么

 [str.slice(0..5), str.slice(6..-1)]
Run Code Online (Sandbox Code Playgroud)

真的应该查看http://corelib.rubyonrails.org/classes/String.html

  • 或str [0 ... 6],你到处写着键值"6" (2认同)

Jor*_*ing 12

这是选项.但请注意,它会改变原始字符串:

part1, part2 = str.slice!(0...6), str

p part1  # => "267234"
p part2  # => "62345"
p str    # => "62345"
Run Code Online (Sandbox Code Playgroud)

更新

自从我写这个答案以来的几年里,我已经同意评论者抱怨它可能过于聪明.以下是一些不会改变原始字符串的其他选项.

警告:这个只适用于ASCII字符.

str.unpack("a6a*")
# => ["267234", "62345"]
Run Code Online (Sandbox Code Playgroud)

下一个使用magic变量$',它在最近的Regexp匹配后返回字符串的一部分:

part1, part2 = str[/.{6}/], $'
p [part1, part2]
# => ["267234", "62345"]
Run Code Online (Sandbox Code Playgroud)

最后一个使用lookbehind将字符串拆分到正确的位置,而不返回任何额外的部分:

p str.split(/(?<=^.{6})/)
# => ["267234", "62345"]
Run Code Online (Sandbox Code Playgroud)

  • 我不会说功能风格*总是比命令式风格更好,但恕我直言,这种现场改变太巧妙了,不可取. (3认同)