【问题标题】:Unable to properly split a string using "\n" in golang无法在 golang 中使用“\n”正确拆分字符串
【发布时间】:2019-05-17 10:33:31
【问题描述】:

我正在尝试将free 命令的输出拆分为 3 行。 free 的一般输出是

total used free shared buff/cache available Mem: 16309236 11129884 860300 534300 4319052 4306208 Swap: 20971516 234236 20737280

但是当我使用 golang 的 strings.Split() 时,Split 函数现在按预期运行。我尝试调试它,但找不到任何东西。

请帮助。

package main

import "os/exec"
import "github.com/golang/glog"
import "fmt"
import "strings"
import "errors"

func thisWorks() {
    str_out := "hello world \n How are you \nthis is good"
    lines := strings.Split(str_out, "\n")
    fmt.Printf("lines is  \n%s\n", lines)
}

func GetFreeOutput() error {

    var errMsg string
    bytes_out, err := exec.Command("free").Output()

    // This shows that the output has 10 (newline) in it.
    fmt.Println(bytes_out)

    if err != nil {
        errMsg = "Error geting output of free command"
        glog.Fatal(errMsg)
        return errors.New(errMsg)
    }

    str_out := string(bytes_out)
    fmt.Printf("str_out is  \n%s", str_out)

    // This is not splitting the lines, it is converting the whole output to a single line.
    fmt.Println("\nLines are ", strings.Split(str_out, "\n"))

    index_of_newline := strings.Index(str_out, "\n")

    // This gives the index of "\n" as 79 on my machine, which is correct.
    fmt.Printf("\nIndex is %d", index_of_newline)

    fmt.Println("\nLine using index are ", strings.Split(str_out, string(str_out[index_of_newline])))

    return nil
}

func main() {
    err := GetFreeOutput()
    fmt.Printf("Error is %s", err)
}

【问题讨论】:

  • 投反对票的人请让我知道在写问题时出了什么问题,以便可以在进一步的问题中改进。

标签: string go split


【解决方案1】:

Split 正在按您的预期工作。问题在于如何打印线条。

下面 Println 的第二个参数是一个切片。

 // This is not splitting the lines, it is converting the whole output to a single line.
fmt.Println("\nLines are ", strings.Split(str_out, "\n"))

根据fmt 文档,切片打印为:

[elem0 elem1 ...]

注意元素之间用空格隔开。按 \n 分割并打印实际上会将 \n 替换为 ' '。试试这个代码来确认 split 是否按预期工作:

for i, line := range strings.Split(str_out, "\n") {
   fmt.Println(i, line)
}

【讨论】:

    猜你喜欢
    • 2022-11-15
    • 2012-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多