计算字符串中元素出现次数的代码 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);
}
}
我这里有这段代码,它会打印出 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);
}
}