Cyr*_*don 6 java regex unicode google-maps character-properties
我需要在Java中替换字符串中的所有特殊控制字符.
我想问谷歌地图API v3,谷歌似乎并不喜欢这些字符.
示例:http://www.google.com/maps/api/geocode/json?sendor = false&address = NEWS%20YORK%C2%8F
此URL包含以下字符:http://www.fileformat.info/info/unicode/char/008f/index.htm
所以我收到了一些数据,我需要对这些数据进行地理编码.我知道有些角色不会通过地理编码,但我不知道确切的列表.
我是不是能够找到的有关这个问题的任何文件,所以我认为谷歌不喜欢的字符的列表是这一个: http://www.fileformat.info/info/unicode/category/Cc/list.htm
是否有任何已构建的函数来摆脱这些字符,或者我必须构建一个新的,逐个替换?
或者有一个很好的正则表达式完成工作?
有人知道谷歌不喜欢哪个角色列表?
编辑:Google为此创建了一个网页:
https://developers.google.com/maps/documentation/webservices/?hl=fr#BuildingURLs
pol*_*nts 11
如果要删除Other/Control Unicode类别中的所有字符,可以执行以下操作:
System.out.println(
"a\u0000b\u0007c\u008fd".replaceAll("\\p{Cc}", "")
); // abcd
Run Code Online (Sandbox Code Playgroud)
请注意,这实际上'\u008f'从字符串中删除(以及其他)Unicode字符,而不是转义的表单"%8F"字符串.
如果一个Unicode块/类别没有很好地捕获黑名单,那么Java确实有一个强大的字符类算术,它可以使用交集,减法等.或者,您也可以使用否定的白名单方法,即不是明确指定哪些字符是非法的,而是指定合法的内容,然后其他所有内容都变为非法.
这是一个减法示例:
System.out.println(
"regular expressions: now you have two problems!!"
.replaceAll("[a-z&&[^aeiou]]", "_")
);
// _e_u_a_ e___e__io__: _o_ _ou _a_e __o __o__e__!!
Run Code Online (Sandbox Code Playgroud)
这[…]是一个角色类.类似于[aeiou]匹配任何一个小写元音的东西.[^…]是一个否定的角色类.[^aeiou]匹配除小写元音之外的任何东西.
[a-z&&[^aeiou]]匹配[a-z]减去[aeiou],即所有小写辅音.
下一个示例显示了否定的白名单方法:
System.out.println(
"regular expressions: now you have two problems!!"
.replaceAll("[^a-z]", "_")
);
// regular_expressions__now_you_have_two_problems__
Run Code Online (Sandbox Code Playgroud)
只有小写字母a-z是合法的; 其他一切都是非法的.