检查REBOL字符串是否包含另一个字符串

时间:2014-08-11 21:03:00

标签: rebol

我尝试使用find函数检查字符串"ll"中字符串"hello"的出现次数,但它返回"ll"而不是truefalse

"This prints 'll'"
print find "hello" "ll"

REBOL的标准库是否有任何函数来检查字符串是否包含另一个字符串?

3 个答案:

答案 0 :(得分:5)

试试这个

>> print found? find "hello" "ll"
true
>> print found? find "hello" "abc"
false

答案 1 :(得分:1)

@ShixinZeng是否正确有一个FOUND?在Rebol。但是,它只是定义为:

found?: function [
    "Returns TRUE if value is not NONE."
    value
] [
    not none? :value
]

因为它相当于not none? ......你可以写:

>> print not none? find "hello" "ll"
true
>> print not none? find "hello" "abc"
false

或者如果你想要另一个偏见:

>> print none? find "hello" "ll"
false
>> print none? find "hello" "abc"
true

旨在帮助您在使用FIND时提高可读性。但是,我不喜欢它,因为它在不与FIND一起使用时会产生混乱的行为,例如

>> if found? 1 + 2 [print "Well this is odd..."]
Well this is odd...

由于您可以在带有IF和UNLESS和EITHER的条件表达式中使用FIND的结果,因此您并不经常需要它...除非您将结果分配给您真正想要的变量是布尔值。在这种情况下,我不介意使用NOT NONE?还是没有?酌情。

在我看来,失去了FOUND?从核心来看会很好。

答案 2 :(得分:1)

如先前的答案中所述查找为您提供了可以在条件表达式中使用的结果。

>> either find "hello" "ll" [
[    print "hit"
[    ] [
[    print "no hit"
[    ]
hit

或以更反叛的方式

>> print either find "hello" "ll" [ "hit"] [ "no hit"]
hit

但您也可以在结果上使用 to-logic ,为您提供 true false

>> print to-logic find "hello" "ll"
true
>> print  find "hello" "lzl"                 
none
>> print  to-logic find "hello" "lzl"
false