java - 用于计算在字符串 java 中找到元素出现次数的代码
问题描述
我在这里有这段代码,它会打印出在数组 [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.");
}
}
}
}
}
解决方案
除非它是同一个实例,否则您对数据类型的比较String
将不起作用。要检查字符串是否具有相同的字符,您应该使用.equals()
. 请记住,Integer
(not int
) 的比较也是这样工作的。其背后的原因是这String
是一个类而不是原始类型。还阅读了这篇文章。
所以随着
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.");
}
推荐阅读
- android - Google WebRTC 是否支持 Cisco Open H.264?
- c# - 是否可以将短时区字符串作为 EST CET PST 转换为 C# 中的 TimeZoneInfo?
- php - 在输入字段上使用类属性声明值
- javascript - 不同系统中打印窗口的不同边距
- java - 可以使用杰克逊从内部 json 对象中获取字段吗?
- python - 为什么我的代码在 Eclipse 控制台中比在 Eclipse 的 PyDev Python 控制台中运行得更快?
- android - Ionic 3 - 未安装应用程序。包裹似乎已损坏
- android - 是否可以从 CameraPreview 中抓取一个像素?
- spring-integration - 使用 spring 集成网关向不同主题发送消息
- java - Java - 带有类路径的 java.io.File