java - 在 ArrayList<String> 中查找匹配的字符串出现

标签 java string arraylist

我有一个 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/

相关文章:

java - 在 Tomcat 关闭之前触发一个操作来执行持久性提交

java - 如何从数组列表中提取某些子字符串之间的不同子字符串?

c - 第二个字符串没有被扫描

java - ArrayList<List<>>变量在Java中通过引用复制值?

java - 合并两个没有重复子类的ArrayList

java - Camel 路线可耻地关闭

java - 从 JSpinner 获取 TIME 值

java - 检查表单是否有空值

c# - 是否可以将一组字符串转换为一个字符串?

Java - 根据多个值过滤列表