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

我想使用|.I 分割字符串。我在 java 中有上面的字符串。当我使用

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

我得到的结果是 82。这里可能出了什么问题。

4

6 回答 6

13

String#split使用正则表达式作为参数。管道字符|具有特殊含义(意思是 OR)防止 String 在每个 literal 内部被拆分|

应该逃脱

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

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

于 2013-08-16T13:33:44.380 回答
8

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

选项:

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

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

如果您真的想使用String.split,我肯定会Pattern.quote向任何阅读代码的人说明您为什么要逃避它 - 只是 using"\\|"不是很自我记录,IMO。

于 2013-08-16T13:37:01.627 回答
2

你忘记了转义字符,

text.split("\\\|");
于 2013-08-16T13:35:26.083 回答
1

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

text.split("\\|")
于 2013-08-16T13:37:09.483 回答
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);
        }
    }

}
于 2013-08-16T13:46:47.997 回答
1

番石榴,像往常一样!

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

这将返回一个 Iterable。

于 2013-08-16T14:35:37.563 回答