我正在编写一个程序来读取日志文件,然后计算某些字符串的显示次数。我试图手动输入字符串作为关键字,但由于有这么多,我决定最好搜索日志文件,当它遇到“ua”时,它应该从“ua,”创建一个新字符串到行的末尾,将其添加到哈希图中,并增加该特定字符串的计数(我感兴趣的所有字符串都以“ua,”开头)。我似乎无法弄清楚如何将新字符串添加到哈希图中。这是我到目前为止。
public class Logs
{
public static void main(String args[]) throws IOException
{
Map<String, Integer> dayCount = new HashMap<String, Integer>();
for (String str : KeyWords)
{
dayCount.put(str, 0);
}
File path = new File("C:\\P4logs");
for(File f: path.listFiles())
{ // this loops through all the files + directories
if(f.isFile())
{ // checks if it is a file, not a directory.
try (BufferedReader br = new BufferedReader(new FileReader(f.getAbsolutePath())))
{
String sCurrentLine;
while ((sCurrentLine = br.readLine()) != null)
{
boolean found = false;
for (String str : DayCount.keySet())
{
if (sCurrentLine.indexOf(str) != -1)
{
DayCount.put(str, DayCount.get(str) + 1);
found = true;
break;
}
}
if (!found && sCurrentLine.indexOf("ua, ") != -1)
{
System.out.println("Found an unknown user action: " + sCurrentLine);
DayCount.put(key, value) //not sure what to put here
}
}
}
for(String str : KeyWords)
{
System.out.println(str + " = " + DayCount.get(str));
}
}
}
}
}
最佳答案
您不需要遍历哈希图的键来查看是否存在!这违背了使用哈希图的目的(在您的解决方案中查找 O(1)
没有冲突与 O(n)
)。你应该只需要做这样的事情:
//If a key doesn't exist in a hashmap, `get(T)` returns null
if(DayCount.get(str) == null) {
//We know this key doesn't exist, so let's create a new entry with 1 as the count
DayCount.put(str, 1);
} else {
//We know this key exists, so let's get the old count, increment it, and then update
//the value
int count = DayCount.get(str);
DayCount.put(str, count + 1);
}
另一方面,请考虑遵循 Java 命名约定。变量应以小写字母开头(即
dayCount
与 DayCount
)。只有类应该以大写字母开头。你现在拥有的方式,看起来 DayCount
是一个带有名为 put
的静态方法的类。关于java - 将新字符串添加到哈希图 java,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15367938/