我有一个字符串= 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());
输出结果为:
12.05.2014
10
//empty line
答案 0 :(得分:5)
split
使用正则表达式,正则表达式.
表示"行分隔符旁边的任何字符"。
所以你在每个角色上分裂,创建充满空元素的数组,如
"foo".split(".")
首先会创建["","","",""]
,但由于split
也会跟踪位于数组末尾的空元素,因此您将获得空数组[]
。通过将负值传递为split(regex,limit)
,可以使用重载版本的分割limit
关闭最后一个空字符串。
要解决此问题,您需要转义.
。为此,您可以使用例如
split("\\.")
- 正则表达式中的标准转义split("[.]")
- 使用character class split("\\Q.\\E")
- \Q
和\E
标记区域,其中正则表达式元字符应被视为简单文字split(Pattern.quote("."))
- 此方法在正则表达式编译器中使用Pattern.LITERAL
标志指出正则表达式中使用的元字符是简单文字,没有任何特殊含义另一个问题是for
循环中的情况,但Jeroens answer中有更多问题。
答案 1 :(得分:4)
你的条件是
for(int i = dateCells.length; i < 0; i--){
从3
开始运行,而您的计数器小于0
。从来没有。
明显的解决方案:使用i > 0
或将其更改为从0
循环到3
。
此外:不要忘记逃避点是一个特殊的正则表达式字符。转义是通过反斜杠(\
)完成的,但由于该反斜杠也是一个特殊字符,因此您也必须将其转义。
最终结果:
.split("\\.")
答案 2 :(得分:1)
此外,您需要在分割时转义{{1}},因为.
会将String.split()
视为正则表达式。
.