在ArrayList中查找最常见的String - 当前返回null

时间:2015-05-17 03:57:23

标签: java string arraylist

我对java很新。我一直在研究如何在数组中找到最常见的String,并且我的代码不能正常工作。我的错误是mostCommon在我需要打印出最常用的IP地址时打印出null

这是我的代码......

public class Log_File_Analysis 
{

private static ArrayList<String> ipAddress = new ArrayList<>();
private static String temp , mostCommon;
int max = 0,  num = 0;


public String getMostUsedIpAddress()
{
     Collections.sort(ipAddress);   
    for (String string : ipAddress) 
    {
      if (string.equals(temp)) 
      {
        num++;
      } 
      else {
        if (num>max) 
        {
          max = num;
          mostCommon = string;
        }
        num = 1;
        temp = string;
      }
    }
    return mostCommon;
}

public static void main (String[] args)
{
    System.out.println("Enter a log file to be analyized");
    //Scanner keyboard = new Scanner(System.in);

    File filename = new File("small.log");              
    try
    {   
        Scanner data_store = new Scanner (filename);
        while(data_store.hasNext())
        {
            String line = data_store.nextLine(); 
            int begin = line.indexOf("[client ") + 8;
                int end = line.indexOf("]", begin);
            String ip = line.substring(begin, end);
            ipAddress.add(ip);
            System.out.println(ip);
        }
        data_store.close();
    }
    catch(FileNotFoundException e)
    {
        System.out.println("small.log was not found!");         
    }
    System.out.println(mostCommon);
}

}

请你帮我理解我做错了什么。

3 个答案:

答案 0 :(得分:1)

您的代码中没有任何地方实际上是在调用您的方法来确定最常见的值。

您需要将此添加到main()方法的结尾...

mostCommon = getMostUsedIpAddress();
System.out.println(mostCommon);

基本上,您已经读完了所有值,所以现在您需要调用您的方法来查找最常见的值,然后您可以显示它。目前,您的代码正在打印null,因为您实际上并未尝试在任何地方设置mostCommon的值。

答案 1 :(得分:0)

您似乎没有调用getMostUsedIpAddress方法。

尝试改变 的System.out.println(mostCommon); 至 的System.out.println(getMostUsedIpAddress());

由于您返回的是mostCommon而未将其设置为变量。

答案 2 :(得分:0)

你没有初始化两个字符串temp和mostCommon。 可能是主要问题! 它们通常初始化为String temp =&#34;&#34 ;;如果它们没有内容(就像将int值初始化为0);