The optimized naive string-search algorithm.
This crate is implemented to replace the rust std library. However, the method names are different, so please rewrite your code. It shouldn't be too difficult.
compatibility:
| rust std::str
| this crate |
|:-----------------------------|:---------------------------------------|
| std::str::find()
| naive_opt::Search::search()
|
| std::str::rfind()
| naive_opt::Search::rsearch()
|
| std::str::contains()
| naive_opt::Search::includes()
|
| std::str::match_indices()
| naive_opt::Search::search_indices()
|
| std::str::rmatch_indices()
| naive_opt::Search::rsearch_indices()
|
This crate supports an ASCII case-insensitive match with each function.
| this crate |
|:---------------------------------------------------------|
| naive_opt::Search::search_ignore_ascii_case()
|
| naive_opt::Search::rsearch_ignore_ascii_case()
|
| naive_opt::Search::includes_ignore_ascii_case()
|
| naive_opt::Search::search_indices_ignore_ascii_case()
|
| naive_opt::Search::rsearch_indices_ignore_ascii_case()
|
```rust use naiveopt::{stringsearch, stringrsearch}; use naiveopt::{stringsearchindices, stringrsearchindices};
let haystack = "111 a 111b"; let needle = "a"; let r = stringsearch(haystack, needle); asserteq!(r, Some(4));
asserteq!(stringsearch(haystack, "1"), Some(0)); asserteq!(stringrsearch(haystack, "1"), Some(8));
let v: Vec<_> = stringsearchindices("abc345abc901abc", "abc").collect(); asserteq!(v, [(0, "abc"), (6, "abc"), (12, "abc")]); let v: Vec<_> = stringrsearchindices("abc345abc901abc", "abc").collect(); asserteq!(v, [(12, "abc"), (6, "abc"), (0, "abc")]); ```
```rust use naive_opt::Search;
let haystack = "111 a 111b"; let needle = "a"; let r = haystack.search(needle); assert_eq!(r, Some(4));
asserteq!(haystack.search("1"), Some(0)); asserteq!(haystack.rsearch("1"), Some(8));
let v: Vec<_> = "abc345abc901abc".searchindices("abc").collect(); asserteq!(v, [(0, "abc"), (6, "abc"), (12, "abc")]); let v: Vec<_> = "abc345abc901abc".rsearchindices("abc").collect(); asserteq!(v, [(12, "abc"), (6, "abc"), (0, "abc")]); ```
```rust use naive_opt::SearchIn;
let haystack = "111 a 111b"; let needle = "a"; let r = needle.searchin(haystack); asserteq!(r, Some(4));
asserteq!("1".searchin(haystack), Some(0)); asserteq!("1".rsearchin(haystack), Some(8)); ```
```rust use naive_opt::Search;
let haystack = "111 a 111b"; let needle = "A"; let r = haystack.searchignoreasciicase(needle); asserteq!(r, Some(4)); asserteq!(haystack.rsearchignoreasciicase("A"), Some(4));
let v: Vec<_> = "abc345aBc901abc".searchindicesignoreasciicase("abc").collect(); asserteq!(v, [(0, "abc"), (6, "aBc"), (12, "abc")]); let v: Vec<_> = "abc345aBc901abc".rsearchindicesignoreasciicase("abc").collect(); asserteq!(v, [(12, "abc"), (6, "aBc"), (0, "abc")]);
asserteq!("ignoreasciicase("href"), true); ```
| name
| bench:en
| bench:ja
| musl:en
| musl:ja
|
|:------------------------|------------:|------------:|------------:|------------:|
| stdstrstr | 757.800 μc | 521.920 μc | 728.020 μc | 520.580 μc |
| stdstringstring | 760.410 μc | 525.830 μc | 733.070 μc | 536.770 μc |
| funcstrstr | 102.100 μc | 121.790 μc | 122.460 μc | 122.300 μc |
| funcstringstring | 101.720 μc | 123.290 μc | 102.760 μc | 121.960 μc |
| traitstrstr | 98.238 μc | 120.290 μc | 116.560 μc | 117.960 μc |
| traitstringstring | 98.459 μc | 120.490 μc | 98.106 μc | 118.940 μc |
| stdindices | 470.700 μc | 370.070 μc | 468.480 μc | 392.680 μc |
| funcindices | 100.840 μc | 118.750 μc | 101.620 μc | 146.220 μc |
| trait_indices | 100.920 μc | 118.810 μc | 101.070 μc | 145.120 μc |
us
is micro seconds:en
is english haystack.:ja
is japanese haystack.musl
is x86_64-unknown-linux-muslmemx
- rust crate for the fast mem libThis project is licensed under either of
at your option.