string - 在Julia中截断字符串

标签 string julia

有一个方便的功能可以将字符串截断到一定长度?

相当于这样

test_str = "test"
if length(test_str) > 8
   out_str = test_str[1:8]
else
   out_str = test_str
end

最佳答案

在朴素的ASCII世界中:

truncate_ascii(s,n) = s[1:min(sizeof(s),n)]

会做。如果最好与原始字符串共享内存并避免复制,则可以使用SubString:
truncate_ascii(s,n) = SubString(s,1,min(sizeof(s),n))

但是在Unicode世界(这是Unicode世界)中,这会更好:
truncate_utf8(s,n) = SubString(s,1, (eo=endof(s) ; neo=0 ; 
  for i=1:n 
    if neo<eo neo=nextind(s,neo) ; else break ; end ;
  end ; neo) )

最后,@IsmaelVenegasCastelló使我们想起了字素复杂度(arrrgh),这是需要的:
function truncate_grapheme(s,n)
    eo = endof(s) ; tt = 0 ; neo=0
    for i=1:n
        if (neo<eo)
            tt = nextind(s,neo)
            while neo>0 && tt<eo && !Base.UTF8proc.isgraphemebreak(s[neo],s[tt])
                (neo,tt) = (tt,nextind(s,tt))
            end
            neo = tt
        else
            break
        end
    end
    return SubString(s,1,neo)
end

最后两个实现尝试避免计算length(这可能很慢)或分配/复制,甚至避免在n较短时循环length时间。

此答案来自@ MichaelOhlrogge,@ FengyangWang,@ Oxinabox和@IsmaelVenegasCastelló的贡献

关于string - 在Julia中截断字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39501900/

相关文章:

java - 如何从一串数字之间没有空格的数字中找到缺失的数字?

julia - 使用 `Base.@kwdef` 创建广播结构

sigint - Julia,处理键盘中断

dataframe - Julia |数据框|替换缺失值

julia - 如何在 Julia 中将 Array{Float64,2} 转换为 Array{Array{Float64,1},1}

python - 如何从格式化字符串中查找字符串模板?

java - 现有字符串加倍

php - 将格式化的字符串解析为数组的数组

excel - 在excel vba中将字符串转换为二进制

arrays - Julia 中的数组排序