2017-04-09 48 views
0

我的输入字符串是格式拆分CSV和不同的数组存储在Java

12.8478746,77.6632938,5:20:38 PM 
12.8478746,77.6632938,5:20:49 PM 
12.8478746,77.6632938,5:40:05 PM 
................................ 
12.8478746,77.6632938,5:40:14 PM 

的行数是未知的。我需要解析字符串并将其存储为(double lat,double long,string time)。另外,我需要以(lat,long,time)作为参数进行函数调用,'n'次n取决于输入字符串的行数。我该怎么做呢。

这是我的尝试:

String[] lines = result.split("\\s+"); // split on new lines 

    for (int i = 0; i < lines.length; i++) { 
     String[] temp = lines[i].split("\\s*,\\s*"); 
      double lat = Double.parseDouble(temp[0]); 
      double lo = Double.parseDouble(temp[1]); 
      AddMarker(lat,lo,temp[2]); 
    } 

这不会工作,因为在“下午5时20分38秒”有5点二十○分38秒和PM之间,在我输入一个空格每一行分离由一个空间。 所以,我发现了错误:无效的双“PM”

+1

解决这个问题,或者你写的代码?因为我们希望看到你已经尝试过 –

+0

你可以使用拆分或甚至正则表达式来轻松解决它,我想正则表达式看起来很棒=)。我会为你解决的,但是我同意cricket_007,你做了什么? – Yussef

+0

你可以使用一个简单的正则表达式来分割输入字符串。为了存储,您可以创建一个具有lat,long和time属性的类,并维护它的列表或类似内容。 –

回答

0

你需要做的是与分裂不同的方式工作,它应该接受的分隔符,不要把它当作一个正则表达式:

String[] lines = result.split("\n"); // split on new lines 

或者可能:

String[] lines = result.split("\r\n"); 

而且也:

String[] temp = lines[i].split(","); 

如果您想将日期&时间(“5:20:38 PM”)作为字符串存储,那么就像您已经做的那样传递temp [2]。 如果你想解析为DateTime或类似的东西,请参阅this link

+1

个人而言, d使用真正的CSV解析器。拆分原始逗号并不总是最好的想法 –

0

你应该使用正则表达式。例如:

final String regex = "(.*),(.*),(.*)"; 
    final String string = "12.8478746,77.6632938,5:20:38 PM"; 

    final Pattern pattern = Pattern.compile(regex); 
    final Matcher matcher = pattern.matcher(string); 

    matcher.find(); 

    double lat = Double.valueOf(matcher.group(1)); 
    double lo = Double.valueOf(matcher.group(2)); 
    String time = matcher.group(3); 

    System.out.println("LAT: "+lat); 
    System.out.println("LO: "+lo); 
    System.out.println("TIME: "+time); 

结果:

LAT: 12.8478746 
LO: 77.6632938 
TIME: 5:20:38 PM 
+0

CSV记录不需要正则表达式 –

+0

是的,如果它是一个CSV文件解析,请使用真正的CSV解析器,如Apache Common CSV(https://commons.apache。组织/适当/公地CSV /档案馆/ 1.4/apidocs/index.html的)。 – fandango