我的代码是
public class Main
{
public static void main(String[] args)
{
String inputString = "#..#...##";
String[] abc = inputString.trim().split("#+");
for (int i = 0; i < abc.length; i++)
{
System.out.println(abc[i]);
}
System.out.println(abc.length);
}
}
输出abc是长度为3的数组。 abc [0]是一个空字符串。 abc中的另外两个元素是..和......
如果我的inputString是&#34; .. ## ...&#34;。我没有在split函数返回的数组中得到一个空字符串。在这两种情况下,输入字符串都没有尾随空格。
soemone可以解释一下为什么我在上面显示的代码中有额外的空间?
答案 0 :(得分:1)
你没有获得额外的空间,你得到空字符串(长度为0)。它在javadoc中这样说:
* <p> When there is a positive-width match at the beginning of this
* string then an empty leading substring is included at the beginning
* of the resulting array. A zero-width match at the beginning however
* never produces such empty leading substring
答案 1 :(得分:0)
当您按#+
分割并且输入字符串的第一个字符为#
时,输入将在开头处自动分割,您获得的是一个空字符串作为字符串的第一个元素。这是因为第一个#
的左侧只是锚^
,它只会在结果数组中给出一个空字符串。
答案 2 :(得分:0)
来自Javadoc:
此方法的工作方式就像调用带有给定表达式和limit参数为零的双参数split方法一样。因此,尾随空字符串不包含在结果数组中。
如果n为零,则模式将被应用尽可能多次,数组可以具有任何长度,并且尾随空字符串将被丢弃。
答案 3 :(得分:0)
无论何时将.split表示为String,它都会将字符串n分割满条件。
所以当你说
时String inputString = "#..#...##";
并且您的分割条件为#
,并且由于第一次出现#
之前的值为empty
,abc[0]
将保留empty
。因此,abc的计数将返回3,因为abc [0] =无(空字符串),abc [1] = .. abc [2] = ...