第十六章 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
是更可取的。