我有一个ArrayList,用户可以在程序运行时输入“ 1”然后输入一个字符串来填充字符串:

ArrayList<String> inStrings = new ArrayList<String>();

//(I left out the main while)

if (programCTRL == 1) {
    System.out.println("Enter your keyword!");
    inStrings.add(scan.nextLine());
    System.out.println(inStrings);
}


当用户按下2时,他们应该收到某个单词重复的次数。重复的字符串不必彼此相邻。例如。如果用户键入“ Bear”(熊)三次,“ Owl”(猫头鹰)两次,“ Cat”(猫)一次,则输出应遵循以下内容:

Bear - 3.
Owl - 2.
Cat - 1.


我怎样才能做到这一点?

最佳答案

使用没有任何其他支持结构的相同ArrayList,您可以对元素进行排序:

Collections.sort(inStrings, new Comparator<String>() {
    @Override
    public int compare(String s1, String s2) {
        return s1.compareToIgnoreCase(s2); // if you don't care about uppercase and lowercase;
    }
});


然后在foreach循环中,您可以计算每个元素出现的次数:

String lastElement = null;
int counter = 0;
for(String s : inStrings){
  if(lastElement == null){
    lastElement = s;
    counter = 1;
    continue;
  }
  if(!s.equals(lastElement)){
    System.out.println(lastElement + ": " + counter);
    lastElement = s;
    counter = 1;
  }
  else
    counter++;
}

if(lastElement != null)
   System.out.println(lastElement + ": " + counter);

09-26 21:44