Java字符串拆分问题

时间:2015-09-15 07:12:08

标签: java string split

我想知道为什么分裂字符串的结果

  

FOO:和:嘘声

使用正则表达式

  

0

里面有一个空的空间? 所以输出看起来像这样 -

  

f“”和b

有人可以解释为什么“”在这里?谢谢!

3 个答案:

答案 0 :(得分:5)

  

有人可以解释为什么“”在这里?

因为o中的ofoo之间没有任何内容。正则表达式o会拆分字符串中的每个o

如果您使用了o+,那么您就不会拥有"",因为您说的是“拆分一个或更多 o s”:

Live Example

class Example
{
    public static void main(String[] args)
    {
        String str = "foo:and:boo";
        test("Results from using just \"o\":", str, "o");
        test("Results from using \"o+\":",     str, "o+");
    }

    private static void test(String label, String str, String rex)
    {
        String[] results = str.split(rex);
        System.out.println(label);
        for (String result : results) {
            System.out.println("[" + result + "]");
        }
    }
}

输出:

Results from using just "o":
[f]
[]
[:and:b]
Results from using "o+":
[f]
[:and:b]

答案 1 :(得分:0)

拆分" o"将分裂在每个" o"实测值:

  

" OK" .split(" O&#34);

给出结果:

  1. "" - >索引0(包含)到索引1(不包括)
  2. k - >索引1(包括)到索引2(不包括在内)
  3. 因为索引0与你的正则表达式相匹配" o"。但是为什么foo没有回归""呢?

    split的文档说:

      因此,

    尾随空字符串不包含在结果中   阵列。

    跟踪意味着正则表达式的结尾。如果你在" boo"之后添加一些东西:     String source =" foo:and:boot&#34 ;;     String [] os = source.split(" o");

    System.out.println(String.format("Size of result is [%s]", os.length));
    for (int i = 0; i < os.length; i++) {
        System.out.println(i + " " + os[i]);
    }
    

    输出将是:

    Size of result is [5]
    0 f
    1 
    2 :and:b
    3 
    4 t
    

答案 2 :(得分:0)

如果您知道正则表达式中的索引是如何工作的,我认为您可以理解这一点。

下图是从here复制的。

enter image description here

如您所见,虽然“foo”长度仅为3个字符,但起始索引为0且结束索引为3。

现在,如果你说拆分为“o”(只有一次出现o),你会发现cell1(o)和cell2(o)之间没有任何关系,所以它给出了空字符串。正如其他人提到的,如果使用“o +”(字母o的一个或多个出现)进行拆分,则不会得到空字符串。希望我很清楚。