如何取出字符串中的汉字?

最近项目中需要实现取出用户的位置信息的小功能,但是数据表中location这个表示位置的字段的记录是这样的:

1
"{\"y\":120, \"x\":30, \"loc\":\"浙江省杭州市\"}"

翻译成编程的意思为:取出字符串的汉字。实现过程如下:

1. 查找匹配中文字符的正则表达式

(1) /[\u4e00-\u9fa5]/; 取出字符串中的所有汉字,并把每个汉字当做一个元素,并已数组的形式返回,即 [“浙”, “江” , “省”, “杭”, “州”, “ 市” ] 。
(2)/\p{Han}+/u;匹配字符串中的所有汉字,并把这一串汉字当做一个元素,以数组的形式返回, 即 [ “浙江省杭州市” ]。

2. 使用gsub方法

Ruby中的gsub方法,它的作用是用指定的字符串置换原字符串中的某部分字符。代码片段:

1
2
3
4
5
6
7
8
9
10
11
if @player.present?
@gamer = @player.first
json.code 0
json.msg "已找到该玩家"
json.playerMsg do
json.location @gamer.location.gsub(/\p{Han}+/u).first
end
else
json.code 1
json.msg "玩家不存在"
end

其中 `@gamer.location.gsub(/\p{Han}+/u)` 返回的是数组 [ “浙江省杭州市” ], 如果只想得到里面的字符串,在其后加上first即可。这个用法与使用where条件查询颇为相似。(where查询后的结果返回的也是数组)

3. 踩过的坑

在实现从字符串中取出汉字这个小功能中,一共产生两个思路:一是查找获取数组中元素的方法;二是如何将数组转化为字符串。但是都失败了,下面就来总结下踩过的坑。
示例代码:

1
2
$ irb
$ > str = ["123"] #=> ["123"]

(1)Ruby中 获取数组的第一个元素

1
$ > str[0] #=> "123"

PS: 在Rails中这样用会报错。undefined method '[]'

(2)把数组中的元素变成一个字符串

1
$ > str.join #=> "123"

PS: 在Rails中这样也会报错。undefined method 'join'

总结: Ruby的编译环境(irb), 与Rails环境不可一概而论。