如何在Julia中将Unicode字符串附加到字符串列表?

3

对于整数,可以使用列表推导式来完成:

julia> nums = [1,2,3,4]
4-element Array{Int64,1}:
 1
 2
 3
 4

julia> nums = [i+1 for i in nums]
4-element Array{Int64,1}:
 2
 3
 4
 5

但是当我尝试向一个字符串中添加一个字符时,它会抛出错误:
julia> s = split("the lazy fox jumps over the brown dog")
8-element Array{SubString{String},1}:
 "the"  
 "lazy" 
 "fox"  
 "jumps"
 "over" 
 "the"  
 "brown"
 "dog"  

julia> s2 = [word +'X' for word in s]
ERROR: syntax: invalid comprehension syntax

当字符是一个私有的Unicode字符(http://www.fileformat.info/info/unicode/char/e000/index.htm)时,会抛出另一个错误:

julia> s2 = [word + u'\uE000' for word in s]

错误:未定义变量错误:u未定义 在./array.jl:307中的collect(::Base.Generator{Array{SubString{String},1},##3#4})

如何在Julia中将Unicode字符/字符串附加到字符串列表?


2
在Julia中,字符串连接运算符是*而不是+。另外,它仅适用于字符串,例如"x",而不是字符,例如'x'。您的最后一个示例将读作s2 = [word * "\ue000" for word in s] - tim
谢谢 @tim !!! 但是 "\ue000" 会被识别为一个单独的 Unicode 还是会被解释为 "" + "e" + "000"? - Nat Gillin
2
它被识别为单个Unicode字符。尝试 for c in s2[1] println(c) end - tim
啊,s2[length(s2)][length(s2[length(s2)])] -> \ue000 - Nat Gillin
2个回答

3

为了快速回答你的问题,正确的方式是

[i*"X" for i in s]

然而,请记住'X'"X"是两个不同的东西。
julia> val = 'X'
'X'
julia> typeof(val)
Char

julia> val = "X"
"X"
julia> typeof(val)
String

如果您有Python背景,最初可能会出现这种情况,在Python中两者没有区别。

此外,Julia中的字符串连接是通过 * 而不是 + 来完成的!您可能会问,为什么会这样!好吧,请看这篇文章:这里


1
正如其他答案所说,如果你需要追加一个字符串,你可以使用字符串连接运算符:
[word * "X" for word in s]

如果你真的需要连接一个字符,比如因为你有一个变量c,那么可以使用字符串插值来完成,像这样:

["$word$c" for word in s]

(当然,您也可以使用string(c)将其转换为字符串并使用第一种形式。)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接