我遇到了一个奇怪的情况。我有一个函数,它遍历字符串数组并将每个字符串拆分为“is”,它正在 RSpec 中进行测试,如下所示:
测试体
info_combo = ["pish pish Iron is 3910 Credits","glob prok Gold is 57800 Credits"]
expect(interpreter.solveForUnknownInfo(info_combo)).to eq some_final_expectable_object
函数
def getSubjectsAndObjects(info_combo)
subjects = []
objects = []
info_combo.each do |info_str|
print info_str
subjectsAndObjects = info_str.split("is")
print subjectsAndObjects
subjects << subjectsAndObjects[0]
objects << subjectsAndObjects[1]
end
return subjects, objects
end
调试时的打印输出
"pish pish Iron is 3910 Credits" => first iteration input
["p", "h p", "h Iron ", " 3910 Credits"] => crazy unexpected
"glob prok Gold is 57800 Credits" => second iteration input
["glob prok Gold ", " 57800 Credits"] => expectable output
## 在将第二个输入字符串的第一个子字符串“pish”替换为“another_random_word”之后 ...
"another_random_word pish Iron is 3910 Credits" => first iteration input
["another_random_word p", "h Iron ", " 3910 Credits"] =>some hopeful change
"glob prok Gold is 57800 Credits" => second iteration input
["glob prok Gold ", " 57800 Credits"] => expectable output
## 用“another_random_word”替换最后的“pish”之后
"another_random_word another_random_word Iron is 3910 Credits" => first iteration input
"another_random_word another_random_word Iron ", " 3910 Credits"] => now totally expectable/desired output from function
"glob prok Gold is 57800 Credits" => second iteration input
["glob prok Gold ", " 57800 Credits"] => expectable output
这让我很困惑。我不知道如何调试这个或可能出问题的想法。我认为这是一个文本编辑器故障(Atom),重新启动了程序并且没有任何变化。
我错过了什么?有任何想法吗?也非常欢迎关于改进问题/标题的想法。
最佳答案
您错过了相当简单的事情:“pish”
的中间两个字符是 “is”
。所以当然,如果您根据 “is”
拆分,它会拆分为 “p”
和 “h”
。
有几种方法可以解决这个问题。在您的情况下,最简单的方法可能是在 "is "
上拆分(即,"is"的每一侧都有一个空格)。根据具体需要,您可以改为拆分正则表达式,例如 /\sis\s/
(“is”在两边带有某种 whitespace,可以是空格、制表符等)或 /\bis\b/
(“is”两边都有一个 word boundary - 在这种情况下,“is”不能在单词的中间,而是周围的空格实际上不是匹配项的一部分,因此不会从字符串中删除)。
"his is hers".split(/\sis\s/) # => ["his", "hers"]
"his is hers".split(/\bis\b/) # => ["his ", " hers"]
请注意,在第一种情况下,空格是定界符的一部分并与其一起被删除,但在第二种情况下,它们不是定界符的一部分,因此不会被删除。
关于ruby - 奇怪的行为破坏了字符串的某些部分,但只有特定的字符,Atom,RSpec,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40618025/