第十六章 Caché 函数大全 $FIND 函数
按值查找子字符串,并返回一个整数,指定其在字符串中的结束位置。
大纲
$FIND(string,substring,position)
$F(string,substring,position)
参数
- string 要搜索的目标字符串。它可以是变量名,数值,字符串文字或任何有效的CachéObjectScript表达式,都可以解析为字符串。
- substring 要搜索的子字符串。它可以是变量名,数值,字符串文字或任何有效的CachéObjectScript表达式,都可以解析为字符串。
- position 可选-目标字符串中开始搜索的位置。它必须是一个正整数。
描述
$FIND
返回一个整数,该整数指定字符串中子字符串的结束位置。 $FIND
在字符串中搜索子字符串。 $FIND
区分大小写。如果找到子字符串,则$FIND
返回子字符串后第一个字符的整数位置。如果未找到子字符串,则$FIND
返回值0。
因为$FIND
返回字符在子字符串之后的位置,所以当子字符串是与字符串$FIND
的第一个字符匹配的单个字符时,返回2。当子字符串是空字符串(“”
)时,$FIND
返回1。
可以包括位置选项以指定搜索的起始位置。如果position大于字符串中的字符数,则$FIND
返回值0。
$FIND
计算characters,而不是bytes。因此,它可以与包含8位或16位(Unicode)字符的字符串一起使用。
示例
例如,如果变量var1
包含字符串“ABCDEFG
”,变量var2
包含字符串“BCD
”,则下面的$find
返回值5,指示var2
字符串后面的字符(“E
”)的位置:
DHC-APP>SET var1="ABCDEFG",var2="BCD"
DHC-APP>WRITE $FIND(var1,var2)
5
下面的示例返回4,即字符的位置紧靠子字符串“FOR
”的右侧。
DHC-APP>SET X="FOREST"
DHC-APP>WRITE $FIND(X,"FOR")
4
在以下示例中,$FIND
将搜索不在字符串中的子字符串、null子字符串以及作为字符串第一个字符的子字符串。这些示例分别返回0、1和2:
DHC-APP>WRITE !,$FIND("aardvark","z")
0
DHC-APP>WRITE !,$FIND("aardvark","")
1
DHC-APP>WRITE !,$FIND("aardvark","a")
2
以下示例显示了字符串为空字符串时发生的情况:
DHC-APP>WRITE !,$FIND("","z")
0
DHC-APP>WRITE !,$FIND("","")
1
下面的示例返回14,即字符的位置紧靠X
中第七个字符后第一个出现的“R
”的右侧。
DHC-APP>SET X="EVERGREEN FOREST",Y="R"
DHC-APP>WRITE $FIND(X,Y,7)
14
在下面的示例中,$FIND
在字符串中的最后一个字符之后开始搜索。它返回零(0):
DHC-APP>SET X="EVERGREEN FOREST",Y="R"
DHC-APP>WRITE $FIND(X,Y,20)
0
以下示例使用$FIND
和$REVERSE
从字符串末尾执行搜索操作。此示例在一行文本中查找字符串的最后一个示例。它将该字符串的位置返回为33:
DHC-APP>SET line="THE QUICK BROWN FOX JUMPED OVER THE LAZY DOG."
DHC-APP>SET position=$LENGTH(line)+2-$FIND($REVERSE(line),$REVERSE("THE"))
DHC-APP>WRITE "The last THE in the line begins at ",position
The last THE in the line begins at 33
下面的示例使用名称间接返回6,即紧靠子字符串“THIS
”右侧的字符位置:
DHC-APP>SET Y="x",x="""THIS IS A TEST"""
DHC-APP>WRITE $FIND(@Y,"THIS")
6
注意
EXTRACT, LIST
-
$FIND
按值查找子字符串并返回位置。 -
$EXTRACT
按位置定位子字符串并返回子字符串值。 -
$PIECE
通过分隔符字符或分隔符字符串定位子字符串,并返回子字符串值。 -
$LIST
对特殊编码的字符串进行操作。它通过子字符串计数查找子字符串并返回子字符串值。
$FIND
、$EXTRACT
、$LENGTH
和$PIECE
函数对标准字符串进行操作。各种$LIST
函数对与标准字符串不兼容的编码字符串进行操作。唯一的例外是$LIST
的一个参数和两个参数形式,它们以编码字符串作为输入,但将单个元素值作为标准字符串输出。
代理对
$FIND
无法识别代理对。代理对用于表示某些中文字符并支持日语JIS2004标准。可以使用$WISWIDE
函数确定字符串是否包含代理对。 $WFIND
函数可以识别并正确解析代理对。 $FIND
和$WFIND
相同。但是,由于$FIND
通常比$WFIND
快,因此对于不太可能遇到代理对的所有情况,$FIND
是更可取的。
网友评论