点上的String.split无法按预期工作

Exo*_*mus -1 java string stringbuilder

我有一个字符串= 12.05.2014

而我正试图用"分裂".但由于某种原因它返回空数组.

System.out.println(newDate);
System.out.println(newDate.length());
String [] dateCells = newDate.split(".");

StringBuilder sBuilder = new StringBuilder();
sBuilder.append(dateCells[2]).append(dateCells[0]).append(dateCells[1]);
System.out.println(sBuilder.toString());
Run Code Online (Sandbox Code Playgroud)

输出是:

12.05.2014
10
            //empty line
Run Code Online (Sandbox Code Playgroud)

Psh*_*emo 5

split使用正则表达式,在正则表达式中.表示"行分隔符旁边的任何字符".

所以你拆分每个角色创建充满空元素的数组

"foo".split(".")
Run Code Online (Sandbox Code Playgroud)

最初会创建["","","",""],但由于split还会在数组末尾放置空元素,因此您将获得空数组[].split(regex,limit)通过将负值传递为,可以通过重载版本的分割来关闭尾随最后一个空字符串limit.

要解决这个问题,你需要逃避..为此,您可以使用例如

  • split("\\.") - 正则表达式中的标准逃脱
  • split("[.]")- 使用字符类转义
  • split("\\Q.\\E")- \Q\E标记应将regex元字符视为简单文字的区域
  • split(Pattern.quote("."))- 这个方法使用Pattern.LITERAL正则表达式编译器中的标志来指出正则表达式中使用的元字符是简单的文字,没有任何特殊含义

另一个问题是你的for循环中的条件,但更多关于它在Jeroens的答案.