2013-04-17 50 views
2

我有这个字符串Java字符串分割给人意想不到的结果

String x = "2013-04-17T08:00:00.001,41.14806,-9.58972,-13.0,0.0,0.0,-20.0,4|2013-04-17T08:00:00.001,41.14806,-9.58972,-22.0,0.0,0.0,-20.0,4|2013-04-17T08:00:00.001,41.14806,-9.58972,-31.0,0.0,0.0,-20.0,4|2013-04-17T08:00:00.001,41.14806,-9.58972,-40.0,0.0,0.0,-20.0,4|2013-04-17T08:00:00.001,41.14806,-9.58972,-49.0,0.0,0.0,-20.0,4|2013-04-17T08:00:00.001,41.14806,-9.58972,-58.0,0.0,0.0,-20.0,4|2013-04-17T08:00:00.001,41.14806,-9.58972,-64.0,0.0,0.0,-20.0,4"; 

如果我做分裂这样String vec2 [] = x.split(",");输出将是这个

2013-04-17T08:00:00.001 
41.14806 
-9.58972 
-13.0 
0.0 
0.0 
-20.0 

等。

如果我做这样String vec2[] = x.split("|");输出分割是这样的:

2 
0 
1 
3 
- 
0 
4 
- 
1 
7 
T 
0 
8 
: 
0 
0 
: 

等。

而且我希望类似这样的东西:

2013-04-17T08:00:00.001,41.14806,-9.58972,-13.0,0.0,0.0,-20.0,4 
    2013-04-17T08:00:00.001,41.14806,-9.58972,-22.0,0.0,0.0,-20.0,4 
    and so on 

任何想法有什么不对?

+0

http://stackoverflow.com/questions/1433115/what-is-the-proper-way-of-inserting-的可能重复a-pipe-in​​to-a-java-pattern-expression – Ankit

+0

'String ** vec2 []'在Java中是无效标识符! – NINCOMPOOP

+2

@NoobUnChained我认为这是因为他想让它变成粗体。 – Maroun

回答

10

你需要躲避|

String vec2[] = x.split("\\|"); 

这是因为参数split()正则表达式不是一个字符串。

在正则表达式中,某些字符有特殊的含义。 竖线|代表交替。所以,如果你想根据|分裂,你需要写\\|这就像告诉:“别拿|为一个特殊字符,以它为标志|”。

2

分割参数是一个正则表达式,“|”人物有特殊的含义。尝试转义它\\|

1

String.split(String)拆分正则表达式,而不是字符。正如您在summary of Java regular expression constructs中看到的那样,|的功能如同or结构。

如果要分割|字符,可能需要使用\|将其转义。请注意,要在Java String中转义它,您还需要避开反斜杠:\\|

1

问题是,split(String regex)需要正则表达式作为参数。管道(|)是一个特殊字符在正则表达式,因此必须进行转义:

 String x = "2013-04-17T08:00:00.001,41.14806,-9.58972,-13.0,0.0,0.0,-20.0,4|2013-04-17T08:00:00.001,41.14806,-9.58972,-22.0,0.0,0.0,-20.0,4|2013-04-17T08:00:00.001,41.14806,-9.58972,-31.0,0.0,0.0,-20.0,4|2013-04-17T08:00:00.001,41.14806,-9.58972,-40.0,0.0,0.0,-20.0,4|2013-04-17T08:00:00.001,41.14806,-9.58972,-49.0,0.0,0.0,-20.0,4|2013-04-17T08:00:00.001,41.14806,-9.58972,-58.0,0.0,0.0,-20.0,4|2013-04-17T08:00:00.001,41.14806,-9.58972,-64.0,0.0,0.0,-20.0,4"; 
     String[] arr = x.split("\\|"); 
     for(String str : arr) 
     { 
      System.out.println(str); 
     } 

产量:

2013-04-17T08:00:00.001,41.14806,-9.58972,-13.0,0.0,0.0,-20.0,4 
2013-04-17T08:00:00.001,41.14806,-9.58972,-22.0,0.0,0.0,-20.0,4 
2013-04-17T08:00:00.001,41.14806,-9.58972,-31.0,0.0,0.0,-20.0,4 
2013-04-17T08:00:00.001,41.14806,-9.58972,-40.0,0.0,0.0,-20.0,4 
2013-04-17T08:00:00.001,41.14806,-9.58972,-49.0,0.0,0.0,-20.0,4 
2013-04-17T08:00:00.001,41.14806,-9.58972,-58.0,0.0,0.0,-20.0,4 
2013-04-17T08:00:00.001,41.14806,-9.58972,-64.0,0.0,0.0,-20.0,4 
1

试试这个

String vec2[] = x.split("\\|"); 
1

你需要躲避|字符,因为它是正则表达式或模式。

String x = "2013-04-17T08:00:00.001,41.14806,-9.58972,-13.0,0.0,0.0,-20.0,4|2013-04-17T08:00:00.001,41.14806,-9.58972,-22.0,0.0,0.0,-20.0,4|2013-04-17T08:00:00.001,41.14806,-9.58972,-31.0,0.0,0.0,-20.0,4|2013-04-17T08:00:00.001,41.14806,-9.58972,-40.0,0.0,0.0,-20.0,4|2013-04-17T08:00:00.001,41.14806,-9.58972,-49.0,0.0,0.0,-20.0,4|2013-04-17T08:00:00.001,41.14806,-9.58972,-58.0,0.0,0.0,-20.0,4|2013-04-17T08:00:00.001,41.14806,-9.58972,-64.0,0.0,0.0,-20.0,4"; 
String[] arr = x.split("\\|"); 
for(String s: arr){ 
    System.out.println(s); 
} 
0

,您是否试图逃脱字符作为这样

x.split("\\|"); 
+0

您需要添加一个\因为\本身也必须转义。 – npinti