Index
, LastIndex
A string
contains an important substring. With Index
, we search for that substring. And with LastIndex
we search from right to left.
A for
-loop can be used to iterate through, and test, a string
. But with Index
and LastIndex
this is done in a simpler way, in a single func
call.
We import the "strings" package. Then we assign 2 strings—value1 is part of value2. Index
returns the integer index of value1.
string
, Index
returns -1. The search goes from left to right.string
"rainbow" is found within "the rainbow."package main
import (
"fmt"
"strings"
)
func main() {
value1 := "rainbow"
value2 := "the rainbow"
// See if value1 is found in value2.
if strings.Index(value2, value1) != -1 {
fmt.Println("FOUND")
}
}FOUND
Index
resultIndex
returns an int
index—this is the position where the string
is found. Remember strings are indexed starting at zero.
package main
import (
"fmt"
"strings"
)
func main() {
value := "cat dog"
// Get index of this substring.
result := strings.Index(value, "dog")
fmt.Println(result)
}4
LastIndex
This searches from right to left. It begins its search at the last index and proceeds to the first index. So it finds rightmost matches first.
package main
import (
"fmt"
"strings"
)
func main() {
input := "one two one"
// Get last index, searching from right to left.
i := strings.LastIndex(input, "one")
fmt.Println(i)
}8
IndexFunc
This method receives a func
argument that indicates what characters are matched. In the func
, any Go code can be used. When true is returned, the rune
is matched.
func
passed to IndexFunc
can be specified as a local variable. It could be specified directly as an argument.func
that receives a rune
and returns a bool
can be used. The func
could use a map or external data source to test chars.package main
import (
"fmt"
"strings"
)
func main() {
f := func(c rune) bool {
// Return true if colon or space char.
return c == ':' ||
c == ' ';
}
value := "one:two"
// Pass func to method.
result := strings.IndexFunc(value, f)
fmt.Println(result)
value = "one two"
result = strings.IndexFunc(value, f)
fmt.Println(result)
}3
3
IndexAny
This method receives a string
that represents a set of characters. The first index of any character in that set is returned.
package main
import (
"fmt"
"strings"
)
func main() {
value := "bird"
// Finds the letter "i" index.
// ... No "a" is found in the string.
result1 := strings.IndexAny(value, "ai")
fmt.Println("RESULT1:", result1, value[result1:result1+1])
// Find index of first character in the set of chars.
result2 := strings.IndexAny(value, "x?rd_")
fmt.Println("RESULT2:", result2, value[result2:result2+1])
}RESULT1: 1 i
RESULT2: 2 r
We can extract parts of a string
based on the surrounding substrings. With strings.Index
and LastIndex
we locate a substring.
Character searching is a common task in programs. If more complex tests are needed, a for
-loop can be used, but for simple searches, Index
and LastIndex
are ideal.