有一个方便的功能可以将字符串截断到一定长度?
相当于这样
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/