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

时间:2013-08-16 13:33:08

标签: 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";

我想使用|拆分字符串。我在java中使用了上面的字符串。当我使用

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

我得到了结果82.这里可能有什么问题。

6 个答案:

答案 0 :(得分:11)

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

它应该被转义

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

否则在确定长度

时将使用完整的String

答案 1 :(得分:8)

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

选项:

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

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

如果确实想要使用String.split,我肯定会使用Pattern.quote向所有阅读代码为何你的人说清楚“逃避它 - 仅仅使用"\\|"并不是非常自我记录,IMO。

答案 2 :(得分:2)

你忘记了逃脱角色,

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

答案 3 :(得分:1)

您应该\\忘记这一点。

text.split("\\|")

答案 4 :(得分:1)

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);
        }
    }

}

答案 5 :(得分:1)

番石榴,像往常一样!

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

这会返回一个Iterable。