现在位置: 首页 > 博客文章 > 电脑相关 > IT开发 > 开发语言 > Java > 正文
Java中split函数分割的特别问题
2016年10月11日 18:07:59 Java ⁄ 共 1025字 暂无评论 ⁄ 被围观 2,400次

问题1:竖线分割问题

在 Flex 中,如果一个字符串是用 | 分割,则直接用 xxx.split("|"); 就可以得到分割后的数组,由于它语法与 Java 及其相似,所以想在 Java 中也是这样分割,不过很不幸,出现如下情况:

测试代码:

Code   ViewPrint
  1. public class Test {
  2.     public static void main(String[] args) {
  3.         String s = "a|b|c|d";
  4.         String[] sa = s.split("|");
  5.         System.out.println("Length:" + sa.length);
  6.         int i = 1;
  7.         for (String ss : sa) {
  8.             System.out.println(i++ + "->" +ss);
  9.         }
  10.     }
  11. }

测试结果:

  1. Length:8
  2. 1->
  3. 2->a
  4. 3->|
  5. 4->b
  6. 5->|
  7. 6->c
  8. 7->|
  9. 8->d

究其原因,Java 的 split 函数接受的参数类型为正则表达式,API中这样写:

Parameters:

regex the delimiting regular expression

而 | 在正则里是个特殊字符,有意义所在的,表示“或”的意思,等同于 "" 或空的意思,当然它也表示竖线的意思。

所以当用 | 直接作为参数分割时,会把字符串通过空分割出一个空,以及串中的每一个字符,不管字符串用什么分割,都会切成 8 个长度的数组。

当然,如果想正确的通过竖线来分割得到数组,可以用正确的正则表达式,如把例子代码中的 "|" 改为 "\\|" 或者 "[|]" 则即可得到想要的效果。

至于 Flex 中为什么直接用 | 分割就可以,目前还没查到原因,不过看资料,参数也应该是正则表达式,再调查吧,如果有结果,再补详细说明。

问题2:分割并过滤字符串中的英文

如果有个字符串,是用空格分割的,但如果拿空格过滤,则会把英文字符串分割为一个个单词,比如:

广东工业大学 广工 广工大 广东工大 GDUT Guangdong University of Technology

最好是能把英文的整个字符串分割出来,但目前没有找到好的办法,所以就干脆把英文都去掉,只得到分割后的中文,方法如下:

字符串.split("[^\u4E00-\u9FA5]");

正则表达式的意义为:非中文字符,这样就可以把串中的中文都分割出来。

 

给我留言

留言无头像?