替换Unicode控制字符
我需要在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
所以我收到了一些数据,我需要对这些数据进行地理编码。 我知道有些角色不会通过地理编码,但我不知道确切的列表。
我无法找到有关此问题的任何文档,因此我认为Google不喜欢的字符列表就是这个: http : //www.fileformat.info/info/unicode/category/Cc/list.htm
是否有任何已构建的函数来摆脱这些字符,或者我必须构建一个新的,逐个替换?
还是有一个很好的正则表达式完成工作?
有人知道谷歌不喜欢哪个角色列表?
编辑:Google为此创建了一个网页:
https://developers.google.com/maps/documentation/webservices/?hl=fr#BuildingURLs
如果要删除Other / Control Unicode类别中的所有字符,可以执行以下操作:
System.out.println( "a\u0000b\u0007c\u008fd".replaceAll("\\p{Cc}", "") ); // abcd
请注意,这实际上从字符串中删除了( '\u008f'
)其中的'\u008f'
字符,而不是转义forms的"%8F"
字符串。
如果一个Unicode块/类别没有很好地捕获黑名单,那么Java确实有一个强大的字符类算术,它可以使用交集,减法等。 或者,您也可以使用否定的白名单方法,即不是明确指定哪些字符是非法的,而是指定合法的内容,然后其他所有内容都变为非法。
API链接
-
java.util.regex.Pattern
- regular-expressions.info/Character Class
例子
这是一个减法示例:
System.out.println( "regular expressions: now you have two problems!!" .replaceAll("[az&&[^aeiou]]", "_") ); // _e_u_a_ e___e__io__: _o_ _ou _a_e __o __o__e__!!
[…]
是一个角色类 。 类似[aeiou]
东西与任何一个小写元音相匹配。 [^…]
是一个否定的字符类。 [^aeiou]
匹配除小写元音之外的任何内容 。
[az&&[^aeiou]]
匹配[aeiou]
减去的[aeiou]
[az]
[aeiou]
,即所有小写辅音。
下一个示例显示了否定的白名单方法:
System.out.println( "regular expressions: now you have two problems!!" .replaceAll("[^az]", "_") ); // regular_expressions__now_you_have_two_problems__
只有小写字母az
才合法; 其他一切都是非法的。