java如何计算字符串出现的次数
因此,我为我的代码创建了一条错误消息。目前,我的代码每次出现时都会弹出错误消息。我的代码验证并确保excel文件格式正确。验证后,如果出现错误/警告消息,它将返回这些消息。因此,当我收到错误消息时,每一条消息都会在每次发生时出现。例如,验证excel文件时,错误消息“error,id不得包含特殊字符”出现6次。有什么方法可以简单地写下来检查消息是否已经发生,并保留一个计数器来显示多少次
我考虑过类似于if (message = message) { //then create counter}
的东西,但这不起作用,因为消息总是等于消息。有人有办法吗
编辑:下面是验证代码的小片段。我希望将消息分组在一起,而不是在发布到API时让它们重复
// if there are errors, then
if (!errorResponse.getItems().isEmpty()) {
// set error response
Iterator<ErrorMessage> iter = errorResponse.getItems().iterator();
Set<ErrorMessage> summarizedErrorMessages = new HashSet<>();
while (iter.hasNext()) {
ErrorMessage sem = new ErrorMessage();
ErrorMessage em = iter.next();
if (!summarizedErrorMessages.contains(em)) {
sem.setMessage(em.getMessage());
sem.setTotal(1);
} else {
sem.setTotal(sem.getTotal() + 1);
}
summarizedErrorMessages.add(sem);
}
errorResponse.setItems(summarizedErrorMessages);
warningResponse.setItems(new ArrayList<WarningMessage>());
# 1 楼答案
只是在这里创建一个单独的答案,这样我就可以发布这个问题的完整代码。以下是运行时没有出现错误的代码:
# 2 楼答案
一个
HashMap<String,Integer>
将使用一个String
的哈希代码作为密钥,因此相同的String
将映射到映射中的相同位置因此,当您第一次看到消息字符串时(当它不在地图中时),您可以将其以1的计数推入地图,然后在其后递增:
所以,对于你的具体情况,可能是这样的:
# 3 楼答案
使用
HashMap<String, Long>
,其中键是错误消息,值是错误发生的次数当收到错误消息时,选中
if map.containsKey(message)
,然后获取计数器(long counter = map.get(message)
),将其递增并将其放回映射中(map.put(message, counter + 1L)
)如果映射不包含消息,则将其添加到映射中,并将计数器初始化为1(
map.put(message, 1L)
)比如:
测试:
输出: