对Go字符串进行迭代以提取特定的子字符串
问题描述:
我开始学习Go并且我想实现一些算法。 我想通过遍历字符串,然后提取例如一些字符串:p -(40) *(GOT) +(FF)
应返回一个这样的数组:[p, 40, GOT, FF]
对Go字符串进行迭代以提取特定的子字符串
我写了这样的事情,但它是含糊:
import (
"strings"
)
func find(input string){
var result []string
a := strings.SplitN(input, "-(", 2);
result[0] = a[0]
b := strings.SplitN(a[1], ") *(", 2)
result[1] = b[0]
c := strings.SplitN(a[1], ") +(", 2)
result[2] = c[0]
d := strings.SplitN(a[1], ")", 2)
result[3] = d[0]
}
可有人请纠正我还是建议更容易一些?谢谢!
答
您可以使用strings.FieldsFunc
,像这样的工作示例代码:
package main
import "fmt"
import "strings"
func find(input string) []string {
return strings.FieldsFunc(input, split)
}
func main() {
strs := find("p -(40) *(GOT) +(FF)")
str := strings.Replace(fmt.Sprint(strs), " ", ", ", -1)
fmt.Println(str)
}
func split(r rune) bool {
return r == ' ' || r == '-' || r == '(' || r == ')' || r == '*' || r == '+'
}
输出:
[p, 40, GOT, FF]
您可以使用strings.Fields
然后strings.Trim
,像这样的工作示例代码:
package main
import "fmt"
import "strings"
func main() {
fmt.Println(find("p -(40) *(GOT) +(FF)"))
}
func find(input string) []string {
strs := strings.Fields(input)
result := make([]string, 0, len(strs))
for _, v := range strs {
s := strings.Trim(v, "()+-*")
if len(s) > 0 {
result = append(result, s)
}
}
return result
}
输出:
[p 40 GOT FF]
而且这种方式更适合你的特殊情况:
package main
import "fmt"
import "strings"
func main() {
fmt.Println(find("p -(40) *(GOT) +(FF)"))
}
func find(input string) []string {
strs := strings.Fields(input)
for i := 0; i < len(strs); i++ {
strs[i] = strings.Trim(strs[i], "()+-*")
}
return strs
}
输出:
[p 40 GOT FF]
如果你需要这样的字符串输出: [p, 40, GOT, FF]
,试试这个工作示例代码:
package main
import "fmt"
import "strings"
func main() {
strs := find("p -(40) *(GOT) +(FF)")
str := strings.Replace(fmt.Sprint(strs), " ", ", ", -1)
fmt.Println(str)
}
func find(input string) []string {
strs := strings.Fields(input)
for i := 0; i < len(strs); i++ {
strs[i] = strings.Trim(strs[i], "()+-*")
}
return strs
}
输出:
[p, 40, GOT, FF]
怎么样一个正则表达式? – tkausl
感谢您的回复!有点难为我,我是一个noobie编程.. – jiji
https://play.golang.org/p/dRfMfZhH7- –