当我在 Ruby 中分割最后一个字符时,如何分割字符串?

cpu*_*att 5 ruby string split

我试图将一个字符串分成两部分,然后将其分配给两个变量。

当我围绕中间字符之一分割字符串时,它返回:

a, b = *"12x45".split("x")
>> a: "12"
>> b: "45"
Run Code Online (Sandbox Code Playgroud)

当我围绕第一个字符分割字符串时,它返回:

a, b = *"x2345".split("x")
>> a: ""
>> b: "2345"
Run Code Online (Sandbox Code Playgroud)

但是当我围绕最后一个字符分割字符串时,它返回:

a, b = *"1234x".split("x")
>> a: "1234"
>> b: nil
Run Code Online (Sandbox Code Playgroud)

我本来期望的b""而不是nil。有没有不同的方法来实现这一目标?

ste*_*lag 6

split采用可选的第二个参数来限制拆分数量。当此限制设置为 -1 时,其行为类似于“如果 limit 为负数,则其行为与 limit 为 nil 相同,这意味着没有限制,并且包含尾随空子字符串”(来自文档。所以:

"1234x".split("x", -1) # => ["1234", ""]
Run Code Online (Sandbox Code Playgroud)


Ste*_*fan 6

如果最多有两部分,您还可以使用partition如果其中一部分“缺失”则默认为空字符串。与此相反,它还返回分隔符作为中间元素:(如果不需要,split可以将其分配给)_

a, _, b = "12x45".partition("x")
a #=> "12"
b #=> "45"

a, _, b = "1234x".partition("x")
a #=> "1234"
b #=> ""

a, _, b = "x2345".partition("x")
a #=> ""
b #=> "2345"
Run Code Online (Sandbox Code Playgroud)