java中的字符串拆分不能正常工作,给出错误的结果

PSR*_*PSR 3 java string split

String text="2|919505485043|2013-08-08 12:57:50|2013-08-08 12:58:04|2013-08-08 12:58:08|ANSWER";
Run Code Online (Sandbox Code Playgroud)

我想用|.分割字符串.我在java中使用上面的字符串.我使用的时候

System.out.println(text.split("|").length);
Run Code Online (Sandbox Code Playgroud)

我得到了结果82.这可能是错的.

Rei*_*eus 12

String#split使用正则表达式作为参数.管道字符|具有特殊含义(意味着OR)可防止String在每个文字内部进行拆分|.

它应该被逃脱

text.split("\\|").length
Run Code Online (Sandbox Code Playgroud)

否则String在确定长度时将使用完整


Jon*_*eet 8

String.split(String)使用正则表达式,并且|在正则表达式中具有特殊含义.

选项:

  • 逃脱|手动:text.split("\\|")
  • |编程方式逃脱:text.split(Pattern.quote("|"))
  • 改为使用GuavaSplitter类,以避免使用正则表达式

我个人会采用后一种方法 - 我认为它实际上是一个String.split使用正则表达式的设计缺陷,而且在调用代码时也不清楚.

如果你真的想使用它String.split,我肯定会用Pattern.quote它来清楚地告诉任何人为什么你要逃避它 - 只是使用"\\|"不是非常自我记录,IMO.