似乎Smalltalk实现错过了一个算法,该算法返回String中子字符串的所有索引.最相似的只返回一个元素的索引,例如:firstIndexesOf:in:,findSubstring:,findAnySubstring:variants.
Ruby中有实现,但第一个依赖于Ruby hack,第二个不能忽略重叠的字符串,最后一个使用Enumerator类,我不知道如何转换为Smalltalk.我想知道这个Python实现是否是最好的开始路径,因为考虑两种情况,重叠或不重叠,并且不使用正则表达式.
我的目标是找到一个提供以下行为的包或方法:
'ABDCDEFBDAC' indicesOf: 'BD'. "#(2 8)"
Run Code Online (Sandbox Code Playgroud)
考虑重叠时:
'nnnn' indicesOf: 'nn' overlapping: true. "#(0 2)"
Run Code Online (Sandbox Code Playgroud)
不考虑重叠时:
'nnnn' indicesOf 'nn' overlapping: false. "#(0 1 2)"
Run Code Online (Sandbox Code Playgroud)
在Pharo中,当在Playground中选择文本时,扫描程序会检测子字符串并突出显示匹配项.但是我找不到这个的String实现.
到目前为止,我的最大努力导致了String(Pharo 6)中的这种实现:
indicesOfSubstring: subString
| indices i |
indices := OrderedCollection new: self size.
i := 0.
[ (i := self findString: subString startingAt: i + 1) > 0 ] whileTrue: [
indices addLast: i ].
^ indices
Run Code Online (Sandbox Code Playgroud) 我在Pharo Smalltalk中编写类,但我认为这个问题对其他Smalltalk实现有效.
我知道一种实现具有特定属性的实例的方法是为实例创建提供类方法,然后建议使用类创建方法.但是任何用户都知道可以随时使用new或basicNew.
我想到使new和basicNew无效引发异常,但这似乎是太过激烈的措施,有时我可能需要创建实例来调试.
是否有其他库或机制来强制执行这些特定属性?
我已经为 Dolphin Smalltalk 框架创建了一个小的(测试)补充,我想稍后在 GitHub 上提交。(1 方法:)Integer>>isPrime但首先,我想将此方法的测试方法添加到标准回归测试集中,现在有约 2400 个测试。( IntegerTest>>testIsPrime) 我找到了类TestCase、DolphinTest和IntegerTestSUnit 浏览器。但我没有找到如何将我的测试添加到标准测试集中。
有人能给我指出正确的方向吗?