Golang可以像Python一样对字符串进行乘法运算吗?

jxct1oxe  于 2022-12-07  发布在  Go
关注(0)|答案(4)|浏览(158)

Python可以像这样乘字符串:

Python 3.4.3 (default, Mar 26 2015, 22:03:40)
[GCC 4.9.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> x = 'my new text is this long'
>>> y = '#' * len(x)
>>> y
'########################'
>>>

Golang能以某种方式做同样的事情吗?

4uqofj5v

4uqofj5v1#

它有一个函数而不是运算符strings.Repeat。下面是Python示例的一个移植,可以运行here

package main

import (
    "fmt"
    "strings"
    "unicode/utf8"
)

func main() {
    x := "my new text is this long"
    y := strings.Repeat("#", utf8.RuneCountInString(x))
    fmt.Println(x)
    fmt.Println(y)
}

注意,我使用了utf8.RuneCountInString(x)而不是len(x);前者计算“符文”(Unicode码位),而后者计算字节。对于"my new text is this long",差异并不重要,因为所有的符文都只有一个字节,但养成指定含义的习惯是很好的:

len("ā") //=> 2
utf8.RuneCountInString("ā") //=> 1

由于这是一个Python比较问题,请注意,在Python中,函数len根据调用它的对象计算不同的值。在Python 2中,它计算普通字符串的字节数和Unicode字符串的符文数(u'...'):

Python 2.7.18 (default, Aug 15 2020, 17:03:20)
>>> len('ā') #=> 2
>>> len(u'ā') #=> 1

而在现代Python中,普通字符串 * 是 * Unicode字符串:

Python 3.9.6 (default, Jun 29 2021, 19:36:19) 
>>> len('ā') #=> 1

如果要计算字节数,需要先将字符串编码为bytearray

>>> len('ā'.encode('UTF-8')) #=> 2

所以Python有多种类型的字符串和一个函数来获取它们的长度; Go语言只有一种字符串,但是你必须选择与你想要的语义相匹配的长度函数。
哦,还有一点值得注意的是,戈朗语中的“符文”概念并不(也不能)解决Unicode中的问题,“一个字符有多少个字符串?”这个问题并不总是有一个明确的答案。前面我用字符串“ā”作为一个两字节的单符文字符串的例子。但这个看起来非常相似的字符串--“a  ̄”--实际上是四个字节或两个符文长。第一个是U+0101拉丁小写字母A和Macron,而第二个字符串是U+0061 LATIN SMALL LETTER A后跟U+0304 COMBINING MACRON。正确的Unicode处理会将它们视为同一字符串(通常通过将所有内容转换为规范化形式C或D),但实际上没有任何意义都等于具有确定数量的码点。

9bfwbjaz

9bfwbjaz2#

是的,它可以,尽管不是使用运算符,而是使用标准库中的函数。
使用一个简单的循环很容易实现,但标准库为您提供了一个高度优化的版本:strings.Repeat().
您的示例:

x := "my new text is this long"
y := strings.Repeat("#", len(x))
fmt.Println(y)

Go Playground上试用。
注意:len(x)是字符串的“bytes”长度(字节数)(在UTF-8编码中,这是Go语言在内存中存储字符串的方式),如果需要字符数(rune),则使用utf8.RuneCountInString()

b4wnujal

b4wnujal3#

是的。字符串包有一个Repeat函数。

jfgube3f

jfgube3f4#

你可以使用字符串包.它在这里有一个repeat函数

相关问题