# 查找字符串

下面介绍不使用模式匹配语法的字符串查找函数。

参考：[模式匹配函数](matching.html)

### 一. 禁用模式匹配搜索文本

## 文本模式搜索

`string.indexOf(str,substr [ , startPos [ , endPos ] ])  `
  
查找第二个字符串参数 @substr 位于第一个字符串参数 @str 的位置，找到字符串则返回开始位置与结束位置，返回值按字节计数。 
如果参数 @str 为空字符串则返回 null 值。

参数 @str, @substr 兼容 string/buffer 类型参数。
参数 @str 不能指定 pointer 类型内存指针（改用功能类似的 raw.indexOf 可指定 pointer 指针）。

可选用第三个参数 @startPos 指定开始查找的位置，默认为 1。可选用第四个参数 @endPos 指定结束查找的位置，默认为字符串长度。

> 注意在 aardio 中所有字符串函数类似上面表示字节位置的 @startPos ,  @endPos 参数，默认都允许使用负数表示尾部倒记数，并且自动检查并转换为安全有效的范围（传入过大过小的值会自动处理）
  
```aardio
print( string.indexOf("abcdefg","cde") ) //显示 3,5
```  

### 二. 禁用模式匹配反向查找字符串

`string.lastIndexOf(str,substr [ , endPos]) ` 
  
自后向前查找第二个字符串参数 @substr 位于第一个字符串参数 @str 的位置，找到字符串则返回开始位置与结束位置，返回值按字节计数。 此函数执行二进制搜索，字符串可包含  `'\0'` 。

可选用第三个参数 @endPos 指定搜索范围最后一个字节的位置（默认值为 -1 ），如果为正数则从左侧向右侧（尾部）按字节计数，如果为负数则自尾部反向按字节计数。传入过大过小的值会自动处理。

此函数自 @endPo 开始反向逐个字节向前查找字符串，效率较低。

示例：
  
```aardio
print( string.lastIndexOf("abcdefg","cde") ) //显示 3,5
```  

### 三. 查找任意单字节字符

`string.indexAny(str,bytes | bytecode [ , startPos])  `
  
在第一个字符串参数 @str 中查找第二个字符串参数 @bytes 中的任意一个单字节字符置。也可以在第二个参数指定一个字节码。第二个参数可包含  `'\0'` 或指定要搜索的字节码为 0。

可选用第三个参数 @startPos 指定开始查找的位置，默认为 1。

找到字符则返回该字符所在位置，返回值按字节计数。
  
```aardio
import console;

console.log( string.indexAny("abcdefg","cde") ) //显示 3
console.log( string.indexAny("abcdefg",'c'# ) ) //显示 3

console.pause(); 
```  

### 四. 反向查找任意单字节字符

`string.lastIndexAny(str,bytes | bytecode [ , endPos]) ` 
  
自后向前查找第二个字符串参数 @bytes 中的任意一个单字节字符位于第一个字符串参数 @str 的位置。也可以在第二个参数指定一个字节码。第二个参数可包含  `'\0'` 或指定要搜索的字节码为 0。

可选用第三个参数 @endPos 指定搜索范围最后一个字节的位置（默认值为 -1 ），如果为正数则从左侧向右侧（尾部）按字节计数，如果为负数则自尾部反向按字节计数。传入过大过小的值会自动处理。

返回值按字节计数。 

示例：
  
```aardio
import console;
console.log( string.lastIndexAny("abcdefg","cde") ) //显示 5
console.pause(); 
```  

### 五. 检测是否以指定字符串开始

`string.startsWith(str,substr,是否忽略大小写=false)  `
  
判断第二个字符串参数 @substr是否位于第一个字符串参数 @str 开始处。参数三为可选参数(默认为false)

示例：

```aardio
import console;
console.log( string.startsWith("abcdefg","abc") ) //显示 true
console.log( string.startsWith("abcdefg","efg") ) //显示 false
console.pause(); 
```  

### 六. 检测是否以指定字符串结束

`string.endsWith(str,substr,是否忽略大小写=false)  `
  
判断第二个字符串参数 @substr 是否位于第一个字符串参数 @str 结束处。可选参数三指定是否忽略大小写( 默认值为false )。

示例：
  
```aardio
import console;
console.log( string.endsWith("abcdefg","abc") ) //显示 false
console.log( string.endsWith("abcdefg","efg") ) //显示 true
console.pause(); 
```