问题1:竖线分割问题
在 Flex 中,如果一个字符串是用 | 分割,则直接用 xxx.split("|"); 就可以得到分割后的数组,由于它语法与 Java 及其相似,所以想在 Java 中也是这样分割,不过很不幸,出现如下情况:
测试代码:
- public class Test {
- public static void main(String[] args) {
- String s = "a|b|c|d";
- String[] sa = s.split("|");
- System.out.println("Length:" + sa.length);
- int i = 1;
- for (String ss : sa) {
- System.out.println(i++ + "->" +ss);
- }
- }
- }
测试结果:
- Length:8
- 1->
- 2->a
- 3->|
- 4->b
- 5->|
- 6->c
- 7->|
- 8->d
究其原因,Java 的 split 函数接受的参数类型为正则表达式,API中这样写:
Parameters:
regex the delimiting regular expression
而 | 在正则里是个特殊字符,有意义所在的,表示“或”的意思,等同于 "" 或空的意思,当然它也表示竖线的意思。
所以当用 | 直接作为参数分割时,会把字符串通过空分割出一个空,以及串中的每一个字符,不管字符串用什么分割,都会切成 8 个长度的数组。
当然,如果想正确的通过竖线来分割得到数组,可以用正确的正则表达式,如把例子代码中的 "|" 改为 "\\|" 或者 "[|]" 则即可得到想要的效果。
至于 Flex 中为什么直接用 | 分割就可以,目前还没查到原因,不过看资料,参数也应该是正则表达式,再调查吧,如果有结果,再补详细说明。
问题2:分割并过滤字符串中的英文
如果有个字符串,是用空格分割的,但如果拿空格过滤,则会把英文字符串分割为一个个单词,比如:
广东工业大学 广工 广工大 广东工大 GDUT Guangdong University of Technology
最好是能把英文的整个字符串分割出来,但目前没有找到好的办法,所以就干脆把英文都去掉,只得到分割后的中文,方法如下:
字符串.split("[^\u4E00-\u9FA5]");
正则表达式的意义为:非中文字符,这样就可以把串中的中文都分割出来。