2017-04-09 49 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