【问题标题】:Converting a string to array [closed]将字符串转换为数组 [关闭]
【发布时间】:2021-05-24 09:44:58
【问题描述】:

我正在使用 Go 编写 terratest,我有字符串 "[[IFN_EYE_HUBW_DEV_AUTO_01] [IFN_EW_HUBW_DEV_AUTO_02]]"。如何将其拆分为一个数组以将 "IFN_EYE_HUBW_DEV_AUTO_01""IFN_EW_HUBW_DEV_AUTO_02" 作为 go 中数组的第一个和第二个元素?

【问题讨论】:

  • 编辑问题以显示您尝试过的代码并描述您遇到的问题。
  • 这不是代码编写服务。你试过什么?包括您的代码。你遇到了什么问题?

标签: arrays string go terratest


【解决方案1】:

您可以简单地将所有[] 替换为Fields,然后将它们拆分为:

package main

import (
    "fmt"
    "strings"
)

func main() {
    inp := "[[IFN_EYE_HUBW_DEV_AUTO_01] [IFN_EW_HUBW_DEV_AUTO_02]]"
    inp = strings.ReplaceAll(inp, "[", "")
    inp = strings.ReplaceAll(inp, "]", "")
    out := strings.Fields(inp)
    fmt.Printf("%v, %v", out[0], out[1])
}

理想情况下,您应该使用正则表达式进行模式匹配,但上面的方法可以很好地完成这项任务。

Go demo here

注意:它将替换所有 [] 括号,因此如果字符串包含这些括号,则也将被替换。

【讨论】:

  • 假设很糟糕。这与使用正则表达式的其他答案非常相似。示例:如果您有一个包含“[”或“]”(或两者)的字符串,或者其他一些 OP 没有告诉我们的边缘情况,它会失败。我认为最好把一切都弄清楚然后回答。
  • 我同意,这就是为什么我明确地为它不起作用的场景添加了注释。
  • @KrishnaChaurasia 谢谢..它正在工作
【解决方案2】:

对于这种操作,您可能有很多解决方案,但我建议您使用正则表达式来解决您的问题,如下所示:

str := "[[IFN_EYE_HUBW_DEV_AUTO_01] [IFN_EW_HUBW_DEV_AUTO_02]]"
re := regexp.MustCompile(`([A-Z0-9_]+)`)
arrayOfStrings := re.FindAllString(str, -1)

【讨论】:

  • 正则表达式效率极低,难以阅读和推理。几乎总是有更好的解决方案。在这种情况下,有非常明显的更好的解决方案。
  • 像什么?替换、拆分、转换……比正则表达式更好?!您如何衡量 RE 的功效?
猜你喜欢
  • 1970-01-01
  • 2013-09-17
  • 2014-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多