2015-10-15 67 views
2

我有一个ArrayList字符串,因此在迭代时,for(int i =0; i < arrayList.size(); i++)。每个字符串都来自.csv文件,因此它们由逗号分隔。其中一列有一个UNIX时间戳,所以数据的一个字符串看起来像这样的事情(我删了不相关的值):根据每个字符串的计算值分割数组列表

1442759243, value, value, value 

因此,我重复,我提取unix的时间戳查找某一天,

java.util.Date time = new java.util.Date((long) timeStamp * 1000); 
// gives a result of Tue Sep 15 22:38:04 SGT 2015 
String date = String.valueOf(time.getDate());; 
// gives the result of "15" 

随着迭代的推移(名单按时间已经排序,因此数字如15中,这样的例子不胜枚举缓慢增加),随之而来的一个点,下一String date是不同的来自前一个的价值。 现在,在每个字符串迭代中,我都设置了一个递增的计数器。当日期改变时,我想要的是让计数器重置并重新开始计数。我的问题是,我该如何“分裂”数组列表,以便我可以重置计数器以重新开始计数?

回答

1

只要保持以前的日期,和当前日期比较在每次迭代前一个:

int counter = 0; 
String prevDate = ""; 
for (int i = 0; arrayList.size(); i++) { 
    long timestamp = Long.parseLong(arrayList.get(i)); 
    Date time = new Date(timeStamp * 1000L); 
    String date = String.valueOf(time.getDate()); 
    if (date.equals(prevDate)) { 
     ++counter; 
    } else { 
     counter = 1; 
     prevDate = date; 
    } 
    // Do something useful with the counter 
} 
+0

你在这里错过了一些小东西;-) – laune

+0

@laune arg,是的。这很尴尬:-( – Mureinik

1

for循环是错误的。它不会编译。

您可以通过调用split(",")来分割数组列表中的值。

getDate()已弃用。使用Calendar

要重置计数器,请记住以前的值并在其更改时进行重置。

Calendar cal = Calendar.getInstance(); 
int counter = 0, prevDay = 0; 
for (int i = 0; i < arrayList.size(); i++,counter++) { 
    String[] values = arrayList.get(i).split(","); 
    cal.setTimeInMillis(Long.parseLong(values[0]) * 1000); 
    int day = cal.get(Calendar.DAY_OF_MONTH); 
    if (day != prevDay) { 
     counter = 0; 
     prevDay = day; 
    } 
    // code here 
} 
+0

我的不好,编辑for循环! – user3763216

相关问题