如何在Golang中找到一个字符索引?

时间:2013-12-29 16:26:09

标签: string go character

我试图在Go中找到“@”字符串字符,但我找不到办法。我知道如何索引像输出“E”的字符“HELLO [1]”。但是我试图找到找到的char的索引号。

在Python中我会按照以下方式进行:

x = "chars@arefun"
split = x.find("@")
chars = x[:split]
arefun = x[split+1:]

>>>print split
5
>>>print chars
chars
>>>print arefun
arefun

所以chars会返回“chars”,而且当使用“@”delimeter时,arefun会返回“arefun”。我一直试图找到解决方案几个小时,我似乎无法在Golang找到合适的方法。

3 个答案:

答案 0 :(得分:46)

您可以使用包strings

Index功能

游乐场:https://play.golang.org/p/_WaIKDWCec

package main

import "fmt"
import "strings"

func main() {
    x := "chars@arefun"

    i := strings.Index(x, "@")
    fmt.Println("Index: ", i)
    if i > -1 {
        chars := x[:i]
        arefun := x[i+1:]
        fmt.Println(chars)
        fmt.Println(arefun)
    } else {
        fmt.Println("Index not found")
        fmt.Println(x)
    }
}

答案 1 :(得分:2)

如果您要搜索非ASCII字符(英语以外的语言),则需要使用http://golang.org/x/text/search

func SubstringIndex(str string, substr string) int, bool {
    m := search.New(language.English, search.IgnoreCase)
    start, _ := m.IndexString(str, substr)
    if start == -1 {
        return start, false
    }
    return start, true
}

index, found := SearchForStringIndex('Aarhus', 'Å');
if found {
    fmt.Println("match starts at", index);
}

搜索language.Tag structs here以查找您要搜索的语言,或者如果您不确定,请使用language.Und

答案 2 :(得分:0)

你好,我是Python开发人员,并尝试使用Golang解决您的问题。 如果您有任何问题让我知道,我认为它非常可读。

var text = "FUN@WITH@GO@LANG@"

// ANSWER 1: 
func findTheSymbol(original string, desiredOne string) []int {
    var foundIndexes []int
    for i := 0; i < len(original); i++ {
        if desiredOne == string(original[i]) {
            foundIndexes = append(foundIndexes, i)
        }
    }
    return foundIndexes
}

// ANSWER 2: using Slice
func usingSlice(original string, desiredOne string) []string {
    return strings.Split(text, "@")
}

func main() {
    // Found Indexes
    ind := findTheSymbol(text, "@")
    // checking length of array/slice
    if len(ind) > 0 {
        var startIndex int = 0
        fmt.Println("The Index/s: ", ind)
        for i := 0; i < len(ind); i++ {
            fmt.Println("part = ", i, string(text[startIndex:ind[i]]))
            startIndex = ind[i] + 1
        }
    } else {
        fmt.Println("Unable to find: ", ind)
    }

    // use the slice
    fmt.Println(strings.Join(usingSlice(text, "@"), ", "))
}

此处运行示例: https://repl.it/repls/ExcitedAgreeableAlgorithm