java - 如何计算字符串出现的次数

标签 java error-handling counter

所以我为我的代码创建了一条错误消息。目前,我的代码每次出现时都会发出错误消息。我的代码验证并确保 Excel 文件格式正确。验证后,如果发生错误/警告消息,它会返回。因此,当我收到错误消息时,每条消息都会在每次发生时出现。例如,验证 Excel 文件时出现 6 次错误消息“错误,id 不得包含特殊字符”。有什么方法可以简单地编写来检查消息是否已经发生,并保留次数的计数器以便我可以显示它?

我想到了类似 if (message = message) {//then create counter} 的东西,但这不起作用,因为 message 总是等于 message。有没有人有办法做到这一点?

编辑:这是验证代码的片段。我想将消息分组在一起,并且在发布到 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>());

最佳答案

一个HashMap<String,Integer>将使用String的 key 的哈希码,因此相同 String将映射到 map 中的相同位置。

因此,当您第一次看到它时(当它不在 map 中时),您可以将消息字符串推送到计数为 1 的 map 中,然后递增它:

HashMap<String,Integer> messageCounts = new HashMap<>();
messages.forEach( message -> {
    messageCounts.putIfAbsent( message, 0 );
    messageCounts.computeIfPresent( message, (k,v) -> v+1 );
});

因此,对于您的具体情况,可能是这样的:

// First map messages to counts
HashMap<String,Integer> messageCounts = new HashMap<>();
errorResponse.getItems().forEach( errorMessage -> {
    messageCounts.putIfAbsent( errorMessage.getMessage(), 0 );
    messageCounts.computeIfPresent( errorMessage.getMessage(), (k,v) -> v+1 );
});

// Then create the summary objects
List<ErrorMessages> summaries = 
    messageCounts.entrySet().stream().map( e -> {
        ErrorMessage summary = new ErrorMessage();
        summary.setMessage( e.getKey() );
        summary.setTotal( e.getValue() );
        return summary;
    } ).collect( Collectors.toList() );

errorResponse.setItems( summaries );

关于java - 如何计算字符串出现的次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51597373/

相关文章:

带闭包和 IIFE 的 JavaScript 计数器

java - 设置 GUI 元素大小的正确方法是什么?

java - Play 框架 - 在带有 Class 参数的路由中调用 Controller

php - 列存在时 'field list' 中的未知列

c# - 如何将计数添加到 Winform 中的按钮单击

python - 使用计数器 python 来自 2 个因式分解列表的 gcd

java - 我可以同时使用 jdbcTemplet 和 hibernate

java - 正则表达式,字符串到 float ,去掉其他字符

python - Python中的异常处理是如何实现的?

javascript - 如何处理Node.js中未处理的异常