【问题标题】:squeak(smalltalk) how to use method `findSubstring: in: startingAt: matchTable:`?吱吱声(smalltalk)如何使用方法`findSubstring:in:startingAt:matchTable:`?
【发布时间】:2019-12-21 17:11:43
【问题描述】:

我应该为matchTable: 选择器发送什么?

在实现中,没有例子也没有详细的解释,所以 如果我将字符串放在in: 选择器中,我不明白哪个对象会收到消息

【问题讨论】:

    标签: string smalltalk squeak


    【解决方案1】:

    matchTable: 关键字提供了一种识别字符的方法,以便它们在比较中变得等价。参数通常是256 条目中的ByteArray,在位置i 处包含比较时要考虑的ith 字符的代码点。

    该表的主要用途是实现不区分大小写的搜索,例如A=a。因此,不是在搜索期间比较手头的字符,而是比较在matchTable 中在它们各自的代码点找到的元素。所以,而不是

       (string1 at: i) = (string2 at: j)
    

    测试变成了

       cp1 := string1 basicAt: i.
       cp2 := string2 basicAt: j.
       (table at: cp1) = (table at: cp2).
    

    换句话说,matchTable: 参数用于将实际字符映射到对比较真正重要的字符。

    请注意,可以将相同的技术应用于区分大小写/不区分大小写的排序。

    最后,请记住,这是一种非系统程序员很少需要的相当低级的方法。您应该使用更高级别的版本来查找子字符串,例如 findString:startingAt:caseSensitive:,其中最后一个关键字的参数是 Boolean

    【讨论】:

    • 我可以用这种方法找到子字符串还是只找到字符串?
    • 您可以在另一个字符串中找到任何出现的字符串。子字符串是字符串,它们之间没有区别。术语 substring 指的是出现在另一个字符串中的字符串。例如,字符串 'al''Smalltalk' 的子字符串,出现两次,一次在索引 3 处,另一个在索引 7 处。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多