在Julia中,对于Unicode字符串的取值,可能不小心就是一个坑。
感谢@Gnimuc ,提供以下链接,可以做为参考。
http://stackoverflow.com/questions/39501900/truncate-string-in-julia

一、问题及提出

julia> strs ="#我是中国人"
"#我是中国人"julia> strs[1:1]
"#"julia> strs[2:2]
"我"julia> strs[3:3]
ERROR: UnicodeError: invalid character indexin getindex(::String, ::UnitRange{Int64}) at .\strings\string.jl:130julia> strs[4:4]
ERROR: UnicodeError: invalid character indexin getindex(::String, ::UnitRange{Int64}) at .\strings\string.jl:130julia> length(strs)
6

二、思路
如果取到类似strs[3:3]的值,有什么办法? 先由字符串=>字符数组…….?

julia> data =collect(take(strs,length(strs)))
6-element Array{Char,1}:'#''我''是''中''国''人'
julia> data2= Vector{Char}(strs) # 这是一种替代的方式
6-element Array{Char,1}:'#''我''是''中''国''人'julia> str =string(data[2:4])
"['我','是','中']"julia> str =string(data[4])
"中"julia> str =String(data[2:4]) # 建议方案,String pk string
"我是中"julia> str =string(data[2:4]...)# 替代方案
"我是中"julia> str =String(data[1:2])
"#我"julia> str =String(data[2:2])
"我"

三、 优化方案

现在封装成自定义函数:


julia> getstrs(strs::String) =collect(take(strs,length(strs)))
getstrs (generic function with 1 method)julia> getindexstrs(strs::String,n,m) =String(getstrs(strs)[n:m]) # String !
getindexstrs (generic function with 1 method)julia> getindexstrs(strs::String,n) =getindexstrs(strs,n,n)
getindexstrs (generic function with 2 method)

效率优化

function stringindex(strs::String,n,m)if isascii(strs)return strs[n:m]elsereturn getindexstrs(strs,n,m)end
end
stringindex(strs,n) =stringindex(strs,n,n);

四、测试

julia> getindexstrs(strs,1,3)
"#我是"julia> getindexstrs(strs,1,1)
"#"julia> getindexstrs(strs,3,3)
"是"julia> getindexstrs(strs,2,4)
"我是中"julia> getindexstrs(strs,5)
"国"julia> getindexstrs(strs,4)
"中"julia> getindexstrs(strs,3)
"是"julia> stringindex("Q我是中国人",1,5) #isascii ->false
"Q我是中国"julia> stringindex("Qabscdsd",2,3) # isascii->true
"ab"

可能还有其它的方式(包括形式和性能都可能不一,如Vector{Char}(strs)),但是这个方式相对比较简单,容易理解。

Julia : 中文字符串的取值 UnicodeError 及解决方案相关推荐

  1. Jackson第二篇【从JSON字符串中取值】

    来源:http://blog.csdn.net/songyongfeng/article/details/6932674 第一篇咱们主要学习了实体与json的相互转换的问题,但是咱们需要的是数据 你转 ...

  2. PHP字符串offset取值特性

    在PHP的代码基础上,PHP字符串offset取值特性,可以拿来利用,给PHP应用程序带来安全风险. 在PHP中,可以像操作数组一样操作字符串,字符串中的字符可以用类似数组结构中的方括号包含对应的数字 ...

  3. html获取contextpath,JavaScript中${pageContext.request.contextPath}取值问题及解决方案

    在JSP里取${pageContext.request.contextPath},方式一是可以正常取到,但方式二却取到的是 字符"${pageContext.request.contextP ...

  4. 自动化测试基础(一):字符串的取值、切割、替换、去除、拼接

    一.前言 字符串:在python中用成对的单引号.双引号.三引号括起来的都是字符串,它可以是中文.英文.特殊字符等几乎任何字符. 二.取值 字符串取值用索引,索引从0开始 s='hello!' #元素 ...

  5. (转)Python 用hashlib求中文字符串的MD5值

    使用过hashlib库的朋友想必都遇到过以下的错误吧:"Unicode-objects must be encoded before hashing",意思是在进行md5哈希运算前 ...

  6. 关于JAVA中URL传递中文参数,取值是乱码的解决办法

    今天遇到一个问题就是在Action当中把一条中文信息绑定在URL的后面,ActionForward到别一个页面时,用reqeust.getParameter取出是出现乱码的问题. 现解决办法如下: 1 ...

  7. Python 用hashlib求中文字符串的MD5值

    From: http://blog.csdn.net/haungrui/article/details/6959340 使用过hashlib库的朋友想必都遇到过以下的错误吧:"Unicode ...

  8. Python @property装饰器的用法,判断函数参数整形、字符串、取值范围

    如果我们对所赋的值有一定的限制,比如要求名字必须是字符串,年龄必须是数字,否则会对方法的调用造成影响,这个时候单纯的赋值就不能满足这样的过滤效果了.既然是条件过滤,那么这几条代码就需要放在方法里,所以 ...

  9. string类型--字符串常用取值操作

    1.字符串常量 (1)不依赖于语言环境: string.ascii_letters ==>'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXY ...

  10. python 下划线转驼峰_json字符串中key值下划线命名转换为驼峰命名

    json字符串中key值下划线命名转换为驼峰命名: 例如: 原json串: String json= "{'user_name':'ok','user_sex':0,'object_info ...

最新文章

  1. 2021 年 ICT 行业预测
  2. Bing空间数据服务
  3. MoeCTF 2021Re部分------PE
  4. 关闭excel多余的addin,提供excel启动速度
  5. 深度学习pytorch--线性回归(三)
  6. 小程序设置header cookie
  7. python并发编程5-线程
  8. 每天一个Linux命令-cat
  9. 敲7(升级版约瑟夫)
  10. Endnote x7 和X8的下载
  11. 简明外贸报价单(Price List)范本
  12. 结对作业 ——UI组第八组 冯富禹 齐天浩
  13. 31位圈内大佬解读DApp困惑:“爆款”也难优秀!
  14. Vue回炉重造之图片加载性能优化
  15. win10下PHP开发环境搭建
  16. CAN负载率为什么不能太高?
  17. 控制器分析-绘制伯德图
  18. javaSE探赜索隐之三<类与对象的爱恨情仇上>
  19. 广发证券电脑linux,广发证券易淘金电脑PC官方版
  20. ac3音频 机顶盒播放音量变小问题

热门文章

  1. 微信JS SDK网页接口
  2. 第一篇:工作之我见一-----------细节决定成败(1)
  3. LOG4J 按类输出日志
  4. IIS安装和ASP.NET Web应用程序开发期间部署到IIS自定义主机域名并附加进程调试...
  5. 【转】Java中的关键字 transient
  6. 算法排序代码(简单排序)
  7. [模板]线性筛素数(欧拉筛法)
  8. Mybatis selectKey标签的keyProperty属性报错,关键字间隔不能有空格
  9. 自动摘要学习计划(英语)
  10. 周题:UVa10736题。Foreign Exchange