2016-09-17 48 views
1

我有一個由日期組成的ArrayList。所有日期均採用以下格式:拆分數組列表中的字符串Java

「日月時間時區年」。舉例如下:Wed Aug 10:15:17 AST 2016

我需要在第二個「:」分割字符串。這是我的代碼來做到這一點。

int dateSize = date.size(); 
int i = 0; 
ArrayList<String> splitDate = new ArrayList<String>(); 
splitDate.clear(); 
while(i < dateSize) { 
    String[] splitString = date.get(i).split(":" + 1); 
    splitDate.add(splitString[0]); 
    Log.i("info", String.valueOf(splitDate)); 
    i++; 
} 

ArrayList包括約50項。起初,這段代碼起作用。它打印此日誌,

Wed Sep 14 23:30,這是我想要的。

但隨後,在隨機的,它開始打印本,

週三9月14日23:30,星期三9月14日23點24分36秒AST 2016年,星期三9月14日23日,星期三月 14 22 ,星期三22年9月14日,星期二09月13 22星期二09月13 22星期二09月13 22時07分33秒AST 2016,週一20年9月12日

有時它將該第二 「:」,有時它分裂第一個「:」,有時它不分割任何東西。我無法弄清楚爲什麼會發生這種情況。如果我改變我的代碼,

String[] splitString = date.get(i).split(":"); 
splitDate.add(splitString[0]); 

它的工作完美無瑕。一切都會打印到日誌中,Wed Aug 10,沒有例外。

我的方法是否正確?

+0

因爲你用這個來分割'「:」+ 1'。 –

+0

你應該使用日期和simpleDateFormatter來代替,這會讓你的生活更輕鬆... –

+0

@ΦXocę웃Пepeúpaツ但是分裂會更快。 :) –

回答

1

好吧,首先這是不是你想要的

String[] splitString = date.get(i).split(":" + 1); 

這是對String分裂「:1」

你想要做的分割上什麼「:」,然後得到數組中的前兩個條目和將它們連接起來

String[] splitString = date.get(i).split(":"); 
splitDate.add(splitString[0] + ":" + splitString[1]); 
1

作爲一個評論說,你的問題是此行

String[] splitString = date.get(i).split(":" + 1); 

本質上,你將會傳遞「:1」作爲sp​​lit()的參數。因此,如果「:1」不存在,您將最終選擇「:1」的第一個實例或整個字符串。例如:

  • 週三8月10日:15:17 AST將於2016年給予週三08月10日
  • 週三八月10:25:17 AST將於2016年給予週三八月10:25
  • 星期三八月10時25分25秒AST將於2016年給予週三八月10時25分25秒AST 2016

如果你知道你的字符串格式,那麼我只是做:

String dateStr = date.substring(0, 13) 

如果您不知道字符串的格式(例如,他們已經被一個用戶敲入了一些),然後我會用正則表達式來檢查它們。

0

如果在格式字符串的數組元素「星期三八月十點15分17秒AST 2016」和你分開/分隔經「:」,你最終將與字符串數組如下:

[0] Wed Aug 10 
[1] 15 
[2] 17 AST 2016 

如果你看看上面的數組,你只能分割字符串然後添加組件(即:你會錯過'17'上面的例子,因爲它落在元素[2]中)。

我不是一個Java開發的,所以語法可能有點過,但如果你想生成「週三08月10日15:17」,那麼我相信你正在尋找這樣的:

String[] splitString = date.get(i).split(":");\\remove "1" from your delimiter 
String tempString = splitString[2].substring(0,1); 
splitDate.add(splitString[0] + " " + splitString[1] + ":" + tempString); 

在上面的代碼片段中,tempString行從分割字符串數組元素[2]中獲取前兩個字符。然後用tempString(即:17)添加前兩個數組元素並獲得輸出結果。

編輯:我只是想提到,如果你有控制日期字符串的輸入,我會建議使用不同的分隔符。使用「:」會導致分隔符在字符串中作爲有效的非分隔符字符存在的問題。上面的代碼片段應該假定輸入不受你/你的方法控制。

0

使用replaceFirst方法更復雜一點。

ArrayList<String> splitDate = new ArrayList<String>(); 
for (String dateItem : date) { 
    String output = dateItem.replaceFirst("^(\\w{3}\\s\\w{3}\\s\\d{2}:\\d{2}):\\d{2}\\s\\w+\\s\\d+$", "$1"); 
    splitDate.add(output); 
    Log.i("info", output); 
} 
0

您可以隨時使用java.util.StringTokenizer類。 考慮到date是包含String格式日期的ArrayList,以下代碼行將以所需格式添加日期。

StringTokenizer dateString = new StringTokenizer(date.get(i), ":"); 
splitDate.add(dateString.nextToken() + ":" + dateString.nextToken()); 

夠簡單!