返回字符串的前n个字符

huangapple go评论80阅读模式
英文:

Return first n chars of a string

问题

在Go语言中,你已经找到了一种有效的方法来返回一个字符串的前n个字符作为子字符串。但是,如果字符串的长度小于n,你只需返回字符串本身。

在Go中,你可以使用以下代码实现:

func firstN(s string, n int) string {
    if len(s) > n {
        return s[:n]
    }
    return s
}

这是一种简洁的方法来实现你的需求。

另外,你提到在Scala中可以使用s take n来实现相同的功能。这是因为Scala提供了更简洁的语法来处理字符串和集合操作。

英文:

What is the best way to return first n chars as substring of a string, when there isn't n chars in the string, just return the string itself.

I can do the following:

func firstN(s string, n int) string {
     if len(s) > n {
          return s[:n]
     }
     return s
}

but is there a cleaner way?

BTW, in Scala, I can just do s take n.

答案1

得分: 7

你的代码在不涉及Unicode的情况下是可以正常工作的:

fmt.Println(firstN("世界 Hello", 1)) // �

如果你想要处理Unicode,可以按照以下方式修改函数:

// 无需分配内存的版本
func firstN(s string, n int) string {
    i := 0
    for j := range s {
        if i == n {
            return s[:j]
        }
        i++
    }
    return s
}
fmt.Println(firstN("世界 Hello", 1)) // 世

// 你也可以将字符串转换为rune切片,但这将需要额外的内存分配
func firstN2(s string, n int) string {
    r := []rune(s)
    if len(r) > n {
        return string(r[:n])
    }
    return s
}
fmt.Println(firstN2("世界 Hello", 1)) // 世

以上是翻译好的内容,请确认是否满意。

英文:

Your code is fine unless you want to work with unicode:

fmt.Println(firstN("世界 Hello", 1)) // �

To make it work with unicode you can modify the function in the following way:

// allocation free version
func firstN(s string, n int) string {
    i := 0
    for j := range s {
        if i == n {
            return s[:j]
        }
        i++
    }
    return s
}
fmt.Println(firstN("世界 Hello", 1)) // 世

// you can also convert a string to a slice of runes, but it will require additional memory allocations
func firstN2(s string, n int) string {
    r := []rune(s)
    if len(r) > n {
        return string(r[:n])
    }
    return s
}
fmt.Println(firstN2("世界 Hello", 1)) // 世

答案2

得分: 2

college := "ARMY INSTITUTE OF TECHNOLOGY PUNE"
fmt.Println(college)

name := college[0:4]
fmt.Println(name)

学院 := "ARMY INSTITUTE OF TECHNOLOGY PUNE"
fmt.Println(学院)

姓名 := 学院[0:4]
fmt.Println(姓名)

英文:
  college := "ARMY INSTITUTE OF TECHNOLOGY PUNE"
  fmt.Println(college)
 
  name :=  college[0:4]
  fmt.Println(name)

huangapple
  • 本文由 发表于 2017年1月12日 06:55:02
  • 转载请务必保留本文链接:https://go.coder-hub.com/41602230.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定