[英]How to count the number of times a string appears in an array without using maps?
我试图计算一个字符串在数组中出现的次数,但是我不能使用任何类型的Map。 根据我的研究,我尝试了以下方法,希望它能起作用:
int count = Collections.frequency(strings, search);
但是,当我在运行程序时遇到错误时。 该错误是一个Null Pointer Exception错误,我不确定如何解决该错误或发生原因。 关于我的代码有什么问题的任何想法吗?
编辑:这是我的完整代码。 我找不到问题所在。 也许其他人可以找到它导入java.util。*;
公共课程Lab9 {
public static void main(String[] args){
Scanner kb = new Scanner (System.in);
String name = null;
List<String> strings =null;
System.out.println("How many strings do you want to enter?:");
int size = kb.nextInt();
List<String> String = getStrings(size,name);
System.out.println(String);
System.out.println("What string would you like to search for?:");
String search = kb.next();
int numofTimes = countValues (search,strings);
System.out.print("That word appears "+numofTimes+" times in the array.");
}
public static List<String> getStrings(int size,String name) {
Scanner kb = new Scanner (System.in);
int count = 0;
List<String> strings = new ArrayList<String>();
while (count != size) {
System.out.println("Enter a string:");
name = kb.nextLine();
strings.add(name);
count = count + 1;
}
return strings;
}
public static int countValues (String search, List<String> strings){
int count = Collections.frequency(strings , search);
return count;
}
}
您可以通过数组进行线性搜索
String strings[] = {"A","B",null,"C","A",null}; // the array contains nulls
String search = "A";
int count = 0;
for (int i = 0;i< strings.length ;i++ )
{
if(strings[i] != null)
{
if(strings[i].equals(search))
{
count++;
}
}
}
System.out.println(count);
在使用strings
之前,请对strings
进行null和大小检查:
if (strings != null && strings.size() > 0) {
int count = Collections.frequency(strings, search);
}
如果size()
返回的数字大于0,则意味着您的strings
包含一些东西,您可以对其执行frequency()
。
查看http://www.tutorialspoint.com/java/util/collections_frequency.htm
有一个很好的使用频率的例子(Collection c,Object o);
如果集合中的值之一为null,则可能发生nullpointerexception。 您确定排他性就在您的频率上吗?
这是Collections.frequency()
的代码:
public static int frequency(Collection<?> c, Object o) {
int result = 0;
if (o == null) {
for (Object e : c)
if (e == null)
result++;
} else {
for (Object e : c)
if (o.equals(e))
result++;
}
return result;
}
如您所见,它能够处理o == null
和包含null
元素的c
。 当c == null
时,它将抛出NullPointerException
的唯一情况。
另外,从文档中:
频率
公共静态int频率(集合c,对象o)
抛出:
- NullPointerException-如果c为null
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.