gpt4 book ai didi

ruby - 在 Ruby 中将字符串清空后返回 nil

转载 作者:数据小太阳 更新时间:2023-10-29 08:43:49 25 4
gpt4 key购买 nike

我正在尝试编写一段代码,从字符串中删除第一个和最后一个字符。字符需要用空格分隔,而不是给定的逗号。例如("1, 2, 3, 4") 将更改为 ("2 3")。

我坚持的一点是 - 如果我删除第一个和最后一个字符,并且字符串现在为空,它应该返回 nil 例如("1, 2") 将是 nil

到目前为止我有:

def array(string)
if string == ""
return nil
else
string.gsub!(',',' ')
string.split
string[2..-3]
end
end

有人可以解释我哪里出错了吗?

最佳答案

这是您的代码的固定版本:

def array(string)
string.gsub!(',',' ')
split = string.split
trimmed = split[1..-2].join(' ')
if trimmed == ""
return nil
else
return trimmed
end
end

p array('1, 2, 3, 4') # "2 3"
p array('2, 3') # nil

您的代码存在一些问题:

  1. 您在函数的开始 处检查空字符串,而不是在修剪函数之后。 (因此,如果您正好传入 "",它只会返回 nil。)
  2. 您没有存储您所做事情的结果。 string.split 不会改变 string 的值。它返回 一个数组,该数组是拆分字符串的结果。所以你需要将结果存储在一个数组中。 (例如 split = string.split。)string.gsub!(...) 是不同的。感叹号表示这是一个破坏性 操作。它实际上改变了字符串。
  3. 你的索引在你最后的修剪中是错误的,但这可能是因为拆分实际上没有起作用,所以你尝试调整索引。
  4. 您从未用空格连接结果。

这里有另一个版本供您尝试:

def trim(string)
trimmed = string.split(', ')[1..-2].join(' ')
trimmed.empty? ? nil : trimmed
end

编辑

我突然想到,也许您的索引是正确的,您根本不打算实际拆分...这是代码的另一个工作版本:

def array(string)
string.gsub!(',', '') # NOTE: '' rather than ' '
trimmed = string[2..-3]
if trimmed == ""
return nil
else
return trimmed
end
end

请注意,此版本的代码依赖于逗号分隔值正好是一个字符长。如果您传入 '12, 35, 421',它将不起作用。出于这个原因,我会坚持使用基于 split 的方法。

关于ruby - 在 Ruby 中将字符串清空后返回 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38688920/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com