Golang 可以像 Python 那样乘以字符串吗?
技术问答
367 人阅读
|
0 人回复
|
2023-09-11
|
Python 可以这样串乘字符:; l& P7 S1 U% j/ k Q! R) z# @
Python 3.4.3 (default,Mar 26 2015年22:03:40[GCC 4.9.2] on linuxType "help","copyright","credits" or "license" for more information.>>> x = 'my new text is this long'>>> y = '#' * len(x)>>> y'########################'>>>
1 E) L3 M2 @$ f) L' W5 [5 m: V4 v7 b+ ^7 { Golang 能以某种方式做同样的事吗?
# x6 K- v$ [' y: w8 Y: k7 U - |. \# D9 i8 S: \8 U8 i
解决方案:
! t6 |( A$ J) p! k3 F0 D, c/ ] 它有一个函数是运算符,strings.Repeat。这是您的 Python 示例端口,您可以在这里操作:; S2 x; U/ @+ m4 ~& ?. q
package mainimport "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)}
$ h' P* G9 C0 D: R5 v 请注意,我用了utf8.RuneCountInString(x)而不是len(x); 前者计算符文(Unicode 代码点),后者计算字节。"my new text is this long",差异并不重要,因为所有的字符都只有一个字节,但养成指定你意思的习惯是很好的:" i' B' y2 s1 d2 A8 p7 A
len("ā") //=> 2utf8.RuneCountInString("ā") //=> 1' _+ O2 z6 P! Z; v) z
因为这是 Python 比较问题,请注意 Python 中,one 函数len根据您调用的内容计算不同的内容。Python 2 中,纯字符串上的字节数和 Unicode 字符串上的符文 ( u'...'):
" i0 C/ T( g- O! @0 ]" X6 BPython 2.7.18 (default,Aug 15 2020年17:03:20>>> len('ā') #=> 2>>> len(u'ā') #=> 1
9 F6 L+ N N' r3 G0 Y. ^/ | 而在现代 Python 中,纯字符串是Unicode 字符串:* ^& k( _/ _8 c8 E( Q0 V* f* s- |
Python 3.9.6 (default,Jun 29 2021,19:36:19>>> len('ā') #=> 1" o: B7 G; w9 q3 {9 y* R
要计算字节数,需要计算字节数bytearray先将字符串编码成一个:& i [1 _' S+ m2 O. I v9 ?! S
>>> len('ā'.encode('UTF-8')) #=> 2
' Z5 E0 z' I" i: ~3 h$ z 所以Python为了获得它们的长度,有多种类型的字符串和函数;Go 只有一个字符串,但你必须选择与你想要的语义相匹配的长度函数。 |
|
|
|
|
|