计算字符串中元素出现次数的代码 java

Code to count how many occurrences of an element are found in a string java

我这里有这段代码,它会打印出 array[i] 处的元素数组中出现的实例数,这对我来说很有意义。计数永远不会超过一,我做错了什么?

import java.util.Scanner;
public class poker
{
    public static void main(String [] args)
    {
        Scanner scan = new Scanner(System.in);
        String[] array = new String[5];
        for(int i = 0; i < array.length; i++)
        {
            array[i] = scan.nextLine();
        }
        for (int i = 0; i < array.length; i++) {
            int count = 0;
            for (int j = 0; j < array.length; j++) {
                {
                    if (array[i] == array[j]) {
                        count++;
                    }

                }
                if (count >= 3) {
                    System.out.println(array[i] + " exists " + count + " times.");
                }
            }
        }
    }
}

这个

if (array[i] == array[j])

只有当引用相同时才为真,如果你想比较字符串值使用

if (array[i].equals(array[j]))

要检查 java 中的字符串是否相等,您必须使用 equals() 函数。
将行更改为 if (array[i].equals(array[j])) 就可以了!
只有当两个数组元素的引用地址相同时,运算符 == 才会 return 为真,因此这就是计数永远不会超过 1 的原因,因为每个引用地址都是唯一的。

您对数据类型 String 的比较将不起作用,除非它是同一实例。 要检查字符串是否具有相同的字符,您应该使用 .equals()。 请记住,Integer(而非 int)的比较也是如此。 其背后的原因是 String 是 class 而不是原始类型。 另请阅读 this post

所以

if (array[i].equals(array[j])) {
    count++;
}

你应该没事的。


附加(更具可读性)解决方案

为了向您提供如何计算相同值的高级方法,我为您创建了一个小样本。 您需要的功能是groupingBy。在计算出现次数时,您将列表的所有值分组到一个属性中。

例子

Map<String, Long> nameAndCount = Arrays.asList(array).stream().collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));

for(Entry<String, Long> entry : nameAndCount.entrySet()) {
    System.out.println(entry.getKey() +  " exists " + entry.getValue()+ " times.");
}
package com.report.automation;

import java.util.HashMap;
import java.util.Map;

public class Frequency {
    public static void main(String[] args) {
        String value[] = { "Mukesh", "Mukesh", "Sasi", "Senthil", "Mukesh", "Mukesh" };
        String match = "Mukesh";
        int count = 0;
        for (int j = 0; j <= 5; j++) {
            if (match.equals(value[j])) {
                count++;
            }
        }
        System.out.println(count);
    }
}