【问题标题】:Is there an Go function for truncating string? [closed]是否有用于截断字符串的 Go 函数? [关闭]
【发布时间】:2021-11-30 07:25:47
【问题描述】:

请帮我写一个函数,它接受一个字符串和一个数字的输入并将一个缩短的字符串输出到数字+“...”。如果字符串不超过大小(数字),则只输出此字符串,但不带“...”。此外,我们的字符串仅使用单字节字符,并且数字严格大于零。

我的两次尝试:

package main

import (
        "fmt"
)
func main() {
var text string
var width int
fmt.Scanf("%s %d",&text,&width)
res := text[:width]
fmt.Println(res+"...")
}

但是这个函数加上“...”即使字符串不超过宽度。

package main
import (
        "fmt"
)
var text string
var width int
fmt.Scanf("%s %d",&text,&width)
if width <= 0 {
    fmt.Println("")
}
res := ""
count := 0
for _, char := range text {
res += string(char)
    count++
    if count >= width {
        break
    }
}
fmt.Println(res+"...")
}

此功能的工作方式相同。

【问题讨论】:

  • 最简单的方法是将字符串转换为[]rune,这样您就可以检查它有多少符文。仅在大于限制时对其进行切片并附加 ...

标签: arrays string go substring truncate


【解决方案1】:

只是一个可以帮助您前进的基本示例:-)

func main() {
    var text string
    var width int = 12
    text = "a ver long string of text to be shortened"
    if len(text) > width {
        text = string([]byte(text)[:width])

    }
    fmt.Println(text + "...")
}

当然,您需要阅读有关符文的信息,有些“字符串”的长度为 3,而您只能看到一个。但是对于普通的 ASCII,上面的方法就可以了。

【讨论】:

【解决方案2】:

继续@Marcelloh 所说的

这是一个使用符文而不是字节的示例。

package main

import (
    "fmt"
)

func Truncate(text string, width int) (string, error) {
    if width < 0 {
        return "", fmt.Errorf("invalid width size")
    }
    
    r := []rune(text)
    trunc := r[:width]
    return string(trunc)+ "...", nil
}

func main() {
    word, err := Truncate("Hello, World", 3)
    if err != nil {
        fmt.Println(err.Error())
    }
    fmt.Println(word)
    // Output: Hel...
}

【讨论】:

【解决方案3】:
package main

import (
    "fmt"
)

func main(){
    var text string
    var width int
    fmt.Scanf("%s %d",&text,&width)
    res := []rune(text)
    if len(res) > width {
        res = res[:width]
        fmt.Println(string(res)+"...")
    } else {
        fmt.Println(string(res))
    }
}

【讨论】:

    猜你喜欢
    • 2021-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-30
    相关资源
    最近更新 更多