我想知道为什么分裂字符串的结果
FOO:和:嘘声
使用正则表达式
0
里面有一个空的空间? 所以输出看起来像这样 -
f“”和b
有人可以解释为什么“”在这里?谢谢!
答案 0 :(得分:5)
有人可以解释为什么“”在这里?
因为o
中的o
和foo
之间没有任何内容。正则表达式o
会拆分字符串中的每个o
。
如果您使用了o+
,那么您就不会拥有""
,因为您说的是“拆分一个或更多 o
s”:
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);
给出结果:
因为索引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复制的。
如您所见,虽然“foo”长度仅为3个字符,但起始索引为0且结束索引为3。
现在,如果你说拆分为“o”(只有一次出现o),你会发现cell1(o)和cell2(o)之间没有任何关系,所以它给出了空字符串。正如其他人提到的,如果使用“o +”(字母o的一个或多个出现)进行拆分,则不会得到空字符串。希望我很清楚。