我有一个 ArrayList<String>
包含表示为字符串的日期,格式为 yyyy-MM-dd
,例如:
ArrayList<String> dates = new ArrayList<>();
dates.add("1991-02-28");
dates.add("1991-02-28");
dates.add("1994-02-21");
我想知道相同的次数String
(日期)出现在列表中。在上面的示例中,我想实现以下输出:
1991-02-28, 2
1994-02-21, 1
我试过下面的代码
ArrayList<String> dates = new ArrayList<>();
dates.add("1991-02-28");
dates.add("1991-02-28");
dates.add("1994-02-21");
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault());
HashMap<String, String> dateCount = new HashMap<String, String>();
String first = dates.get(0);
int count = 1;
dateCount.put(first, String.valueOf(count));
for (int i = 1; i < dates.size(); i++) {
if (first.equals(dates.get(i))) {
count++;
} else {
first = dates.get(i);
dateCount.put(dates.get(i), String.valueOf(count));
count = 0;
}
}
for (String date : dates) {
String occ = dateCount.get(date);
System.out.println(date + ", " + occ);
}
但是它会打印
1991-02-28, 1
1991-02-28, 1
1994-02-21, 2
我累了,卡住了,把 SO 作为最后的手段。感谢您的帮助。
最佳答案
我可能遗漏了一些东西,但看起来您可以像这样简单地做一些事情,只需在 HashMap 中保留日期计数,然后迭代 HashMap 以获得输出:
ArrayList<String> dates = new ArrayList<>();
dates.add("1991-02-28");
dates.add("1991-02-28");
dates.add("1994-02-21");
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault());
HashMap<String, Integer> dateCount = new HashMap<String, Integer>();
for (int i = 0; i < dates.size(); i++) {
String date = dates.get(i);
Integer count = dateCount.get(date);
if (count == null){
dateCount.put(date, 1);
}
else{
dateCount.put(date, count + 1);
}
}
for(String key : dateCount.keySet()){
Integer occ = dateCount.get(key);
System.out.println(key + ", " + occ);
}
输出:
1991-02-28, 2
1994-02-21, 1
关于java - 在 ArrayList<String> 中查找匹配的字符串出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30041393/