Difference between revisions of "SubStringLastIndex"

From Second Life Wiki
Jump to navigation Jump to search
m (tweaked and added byte costs)
Line 31: Line 31:
/*//  Void Singer [ https://wiki.secondlife.com/wiki/User:Void_Singer ]  //*/
/*//  Void Singer [ https://wiki.secondlife.com/wiki/User:Void_Singer ]  //*/
/*//--                                                                --//*/</lsl>
/*//--                                                                --//*/</lsl>
'''Code:'''
Alternative implementation - may be faster, but untested.
<lsl>integer uSubStringLastIndex(string vStrSrc, string vStrTst)
{
    if (vStrTst == "")
        return 0;
    integer index = llSubStringIndex(vStrSrc, vStrTst);
    integer index2;
    if (index != -1) //found, look again
        index2 = uSubStringLastIndex(llGetSubString(vStrSrc, index + 1, -1), vStrTst) + 1;
    return index + index2;
}
/*// Contributed Freely to the Public Domain without limitation by Sasun Steinbeck. //*/</lsl>
}}
}}



Revision as of 14:49, 14 March 2012

User-Defined Function: integer uSubStringLastIndex( string vStrSrc, string vStrTst );

Returns a integer that is the positive index of the last vStrTst within vStrSrc

  • vStrSrc: source string to check
  • vStrTst: string to look for

if vStrTst is not found in vStrSrc -1 is returned.
the index of the first character is 0


Code:

  • LSO: 182 bytes
  • MONO: 1024 bytes

<lsl>integer uSubStringLastIndex( string vStrSrc, string vStrTst ){

   integer vIdxFnd =
     llStringLength( vStrSrc ) -
     llStringLength( vStrTst ) -
     llStringLength(
       llList2String(
         llParseStringKeepNulls( vStrSrc, (list)vStrTst, [] ),
         0xFFFFFFFF ) //-- (-1)
       );
return (vIdxFnd

Caveats

  • Performs a literal match (case sensitive).
    • Wildcards and RegEx are not supported.
  • Attempting to match an empty string ("") will return 0 instead of -1.

Notes

  • This function is operates exactly like llSubStringIndex (including caveats), from the opposite end of the string.