繁体   English   中英

在不使用映射的情况下如何计算字符串出现在数组中的次数?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM