Java 不确定在这种情况下字符串拆分实际上是如何工作的

Java 不确定在这种情况下字符串拆分实际上是如何工作的,java,regex,string,split,Java,Regex,String,Split,我不明白以下几点: 在以下字符串中: String s=“1234;x;y;” 如果我这样做: String[]s2=s.split(“;”) 我得到s2。长度为4和 s2[0] = "1234"; s2[1] = "x"; s2[2] = ""; s2[3] = "y"; 但是在字符串中:string s=“1234;x;y;;” 我得到: s2.长度为3和 s2[0] = "1234"; s2[1] = "x"; s2[2] = "y"; ? 有什么区别,在后一种

我不明白以下几点:

在以下
字符串中

String s=“1234;x;y;”

如果我这样做:
String[]s2=s.split(“;”)

我得到
s2。长度
为4和

s2[0] = "1234";  
s2[1] = "x";  
s2[2] = "";  
s2[3] = "y"; 
但是在字符串中:
string s=“1234;x;y;;”

我得到:

s2.长度
为3和

s2[0] = "1234";  
s2[1] = "x";  
s2[2] = "y"; 
?

有什么区别,在后一种情况下我也没有得到4

更新:
使用
-1
并不是我期望的行为。
我的意思是最后一个分号是
字符串的结尾,因此在后一个示例中,我还希望
4
作为

此方法的工作方式类似于通过调用具有 给定的表达式和零的极限参数。尾随空 因此,结果数组中不包括字符串

更新:

您有五个子字符串,由
分隔在第二种情况下,它们是
1234
x
y
。根据文档,拆分操作产生的所有空子字符串(在末尾)都将被删除。 有关详细信息,请参见

如果n为零,则该模式将应用尽可能多的次数 可能的话,数组可以有任何长度,尾随空字符串 将被丢弃

例如,字符串
boo:and:foo
,使用这些参数生成以下结果:

Regex   Limit   Result
  :       2     { "boo", "and:foo" }
  :       5     { "boo", "and", "foo" }
  :      -2     { "boo", "and", "foo" }
  o       5     { "b", "", ":and:f", "", "" }
  o      -2     { "b", "", ":and:f", "", "" }
  o       0     { "b", "", ":and:f" }   // all the empty substrings at the end were eliminated
从)

该方法的工作原理类似于使用给定表达式和零限制参数调用双参数split方法。因此,结果数组中不包括尾随的空字符串


省略尾随的空字符串。但是,如果需要的话,有一些方法可以明确地包含它们。

好问题。如果检查
String.split()
并用“boo:foo”检查示例,则可以看到后面的空字符串被忽略

该方法的工作原理类似于使用给定表达式和零限制参数调用双参数split方法。因此,结果数组中不包括尾随的空字符串

例如,字符串“boo:and:foo”使用以下表达式生成以下结果:

正则表达式结果

:{“boo”,“and”,“foo”}

o{“b”、“”、“:和:f”}


为什么不先检查一下文件上说了什么。以下是链接:

以下是你的答案:


因此,结果中不包括尾随的空字符串 数组


这是java中split方法不返回空令牌的默认行为。]


s、 拆分(“\;”,-1);应该返回空令牌

您的问题正是文档()中提到的问题。因此,我认为这不是一个恰当的选择question@AdelBoutros:我认为你在这里太苛刻了,当然这种行为在javadocs中有记录,但考虑到在这里被问到的问题太多,我相信Jim问了一个相当不错的问题,方法有些奇怪。他唯一的失误就是在询问之前没有检查javadocs。Java的
拆分
是模仿Perl的,这就是为什么它是这样工作的。我明白了。但是我不能得到与第一个字符串完全相同的结果,对吗?即长度4,因为最后一个分号实际上是字符串的结尾是的,对,您想输入最后一个尾随的空字符串。我不认为您可以临时这样做,但如果您始终确定最后一个元素是分号,则始终可以只拆分字符串的前缀:
s.substring(0,s.length()-1)。拆分(“;”,-1)虽然此链接可以回答问题,但最好在此处包含答案的基本部分,并提供链接供参考。如果链接页面发生更改,仅链接的答案可能无效。-@Neo很明显他们是这样的,因为目前我的链接指向一些博彩网站。。。遗憾的是,这是一个很久以前的答案,来自一个经验较少的我,要重建链接中的内容并不容易。因此,我将删除它。