LlSubStringIndex/ja - Second Life Wiki

LlSubStringIndex/ja

From Second Life Wiki

メインページ > LlSubStringIndex > LlSubStringIndex/ja
Jump to: navigation, search

関数: integer llSubStringIndex( string source, string pattern );

source において pattern が最初に見つかる位置が先頭から何文字目かのinteger値を返します。

• string source
• string pattern

patternsource に無かった場合、-1 が返されます。
先頭文字は 0 文字目です。
全角文字も 1 文字として数えます。

警告

  • マッチングでは大文字/小文字、全角/半角を区別します。
    • ワイルドカードや正規表現は使えません。
  • pattern を空文字列 ("") にした場合、-1 でなく 0 が戻ります。
  • source の末尾から先頭方向へ検索したり、特定の位置から検索を開始する関数はありません。

姓に関するマッチング:

 
default
{
    state_entry()
    {
        llSensorRepeat("", NULL_KEY, AGENT, PI, 96.0, 20);
    }
 
    sensor(integer NumDet)
    {
        integer i;
 
        //検知されたアバター名を順に " Linden" とマッチングさせる。
        //これは Linden という姓とのマッチングになる。(なぜなら名の先頭にスペースは入らないから。)
        //逆に名とマッチングするならば "FirstName " とマッチングさせる。
 
        for(i = 0; i < NumDet; ++i)
            if(~llSubStringIndex(llDetectedName(i), " Linden"))
                llInstantMessage(llDetectedKey(i), "Hello, I see you!");
    }
}
 

基本的な例:

integer index = llSubStringIndex("string data","TEST");
if(index == -1) {
    llSay(0,"TEST という語は文字列中に見つかりませんでした。");
} else {
    llSay(0,"TEST という語が文字列中に見つかりました。");
}

部分的な利用

ある文字列が、特定のキーワードを含んでいるか調べる:

1. 簡潔かつ通常の手法:

 
// haystack に needle が含まれていたら 1 を、含まれていないならば 0 を返す。
integer contains(string haystack, string needle) // http://wiki.secondlife.com/wiki/llSubStringIndex
{
    return 0 <= llSubStringIndex(haystack, needle);
}
 

 
// haystack の先頭が needle だったならば 1 を、そうでないならば 0 を返す。
integer startswith(string haystack, string needle) // http://wiki.secondlife.com/wiki/llSubStringIndex
{
    return llDeleteSubString(haystack, llStringLength(needle), -1) == needle;
}
 

 
// haystack の末尾が needle だったならば 1 を、そうでないならば 0 を返す。
integer endswith(string haystack, string needle) // http://wiki.secondlife.com/wiki/llSubStringIndex
{
    return llDeleteSubString(haystack, 0, ~llStringLength(needle)) == needle;
}
 

註: 上記の例のいくつかは llSubStringIndex を実行せずに return することがあります。

2. 工夫してメモリを抑えた例 (本来 60 バイト以下のところを 54 バイト以下にしました):

 
// haystack に needle が含まれていたら 1 を、含まれていないならば 0 を返す。
integer contains(string haystack, string needle) // http://wiki.secondlife.com/wiki/llSubStringIndex
{
    return ~llSubStringIndex(haystack, needle);
}
 

註: 関数 llSubStringIndex はキーワードが見つからなかった時だけ -1 を返し、ビット反転の演算子 ~ は -1 に適用されたた時だけ 0 を返します。従って ~llSubStringIndex という上手い組み合わせにより、見つからなかった時だけ 0、見つかった時は 0 以外を返すようにできます。

註: メモリを抑えた例は、Code RacerEfficiency Tester で計測した結果、殆ど実行速度に影響が見られませんでした。{ contains("wiki.secondlife.com", "wiki"); }

関連項目

関数

•  llListFindList リストの中の、特定のリストを検索する
•  llGetSubString 文字列から、特定の位置の文字列を取り出す。
この項目はあなたにとって参考にならない項目ですか?もしかしたらLSL Wikiの関連した項目が参考になるかもしれません。