繁体   English   中英

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

[英]string split in java is not working as expected giving wrong result

String text="2|919505485043|2013-08-08 12:57:50|2013-08-08 12:58:04|2013-08-08 12:58:08|ANSWER";

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

System.out.println(text.split("|").length);

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

String#split使用正则表达式作为参数。 管道特征| 有特殊含义(意为OR)防止在每一个字面内部被分割字符串|

它应该被逃脱

text.split("\\|").length

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

String.split(String)使用正则表达式和| 在正则表达式中有特殊含义。

选项:

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

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

如果你真的想使用String.split ,我肯定会使用Pattern.quote让任何阅读代码的人都清楚你为什么要逃避它 - 只需使用"\\\\|" IMO并不是非常自我记录的。

你忘记了逃脱角色,

text.split("\\\|");

你应该把\\\\忘了这个。

text.split("\\|")
public class Sstring {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String text="2|919505485043|2013-08-08 12:57:50|2013-08-08 12:58:04 |2013-08-08 12:58:08|ANSWER";
        System.out.println(text.split("\\|").length);
        String str[] = text.split("\\|");

        for(String i:str){
            System.out.println(i);
        }
    }

}

番石榴,像往常一样!

Splitter.on("|").split("your_text")

这将返回一个Iterable。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM