# llDeleteSubString

*LSL function*

```lsl
string string llDeleteSubString(string src, integer start_index, integer end_index);
```

- `string src`: Source string to modify.
- `integer start_index`: Starting codepoint index of the substring to remove (inclusive). Supports negative indexing.
- `integer end_index`: Ending codepoint index of the substring to remove (inclusive). Supports negative indexing.

- Returns: `string`
- Energy: 10

Returns a copy of the string src with the characters from start_index to end_index (inclusive) removed. Negative indices count backward from the end of the string. If start_index is greater than end_index, the deletion excludes the specified range.

Characters at positions **start** and **end** are removed.

Returns a [string](https://wiki.secondlife.com/wiki/string) that is the result of removing characters from **src** from **start** to **end**.

```lsl title="How to use" frame="terminal"
string result = llDeleteSubString("", 0, 0);
```

## Examples

<details open>
<summary>Example 1</summary>

```lsl
default
{
    state_entry()
    {
        string ex = "abcdefghi";
        llDeleteSubString(ex, 4, 7); //Incorrect!
    }
}
```

</details>

<details>
<summary>Example 2</summary>

```lsl
default
{
    state_entry()
    {
        string ex = "abcdefghi";
        ex = llDeleteSubString(ex, 4, 7); //Correct
        llSay(0, ex); //Would say "abcdi"
    }
}
```

</details>

<details>
<summary>Example 3</summary>

```lsl
//-- special case
default
{
    state_entry()
    {
        string ex = "abcdefghi";
        llSay( 0, llDeleteSubString(ex, 4, 7) ); //Would say "abcdi"
        //-- acceptable if you do NOT want to change the contents of 'ex', only the output
    }
}
```

</details>

## Notes

Indexes start at zero, the index of the first character is zero. Using 0,0 as start and end positions would delete the first character only. Negative indexes count from the far end of the string towards the beginning, so -1 is short form for the last character in a string. Positive and negative indexes can be mixed so using 0, -1 as start and end positions would delete the entire string.

To ascertain how long a string is, use [llStringLength](/functions/llStringLength/).

Granted, wondering how to use this can be bewildering at times: with random text strings being handled by your script, you may wonder how you can know what positions you should be starting and ending the deletion at. [llSubStringIndex](/functions/llSubStringIndex/) is the preferred method of finding a string in a string but it can be a rather involved process. If the user just wants to remove all occurrences of a string from a string they may wish to consider simply using Strife Onizuka's [str_replace](https://wiki.secondlife.com/wiki/Library_Combined_Library#str-replace) function instead, to looks for a value without having to know where it starts and ends, and replacing it with "".

## Known issues

From the issue templates included by the wiki article:

- SCR-6 (bug): llGetSubString & llDeleteSubString can crash scripts with multi-word characters in Mono.

## See also

### Functions

- [llGetSubString](/functions/llGetSubString/)
- [llReplaceSubString](/functions/llReplaceSubString/)
- [llInsertString](/functions/llInsertString/)
- [llDeleteSubList](/functions/llDeleteSubList/)

### Articles

- [CombinedLibrary: str_replace](https://wiki.secondlife.com/wiki/Library_Combined_Library#str-replace)

---

*Source: [LlDeleteSubString](https://wiki.secondlife.com/wiki/LlDeleteSubString) on the Second Life Wiki. Content from the Second Life Wiki articles LlDeleteSubString (revision 1213088, 2023-01-30), Template:LSL Function/negative index (revision 1200041, 2016-05-02) and Template:Issues/SCR-6 (revision 1163319, 2012-02-19), CC BY-SA 3.0.*

---

From lsl.dev: https://lsl.dev/functions/llDeleteSubString/
