首页 > 解决方案 > 如何在java中比较整个字符串中的单词并增加其计数?

问题描述

我有一个String replacedtext是:

Replaced text:OPTIONS (ERRORS=5000)
LOAD DATA
INFILE *
APPEND INTO TABLE REPO.test
Fields terminated by "," optionally enclosed BY '"'
trailing nullcols
(
CODE ,
user,
date DATE "MM/DD/YYYY"
)

我想计算REPO 的数量。在整个字符串中。所以,我尝试过这种方式,但它不起作用。

String[] words = replacedtext.split("\\s+");
        int count=0;
       for(String w:words){​​​​​​​
           if(w.equals("\\bREPO.\\b")){​​​​​​​
               count++;
           }​​​​​​​
       }​​​​​​​
System.out.println ("count is :"+count);

输出是:

count is :0

因为在字符串REPO.中被看到了一次。我的输出需要是count is:1.

标签: java

解决方案


w.equals("\\bREPO.\\b")比较w\\bREPO.\\b字面的内容,因此你得到一个错误的结果。

您可以计算REPO使用 regex API 的次数。

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main {
    public static void main(String[] args) {
        String replacedText = """
                Replaced text:OPTIONS (ERRORS=5000)
                LOAD DATA
                INFILE *
                APPEND INTO TABLE REPO.test
                Fields terminated by "," optionally enclosed BY '"'
                trailing nullcols
                (
                CODE ,
                user,
                date DATE "MM/DD/YYYY"
                )
                """;

        Matcher matcher = Pattern.compile("\\bREPO\\b").matcher(replacedText);

        int count = 0;
        while (matcher.find()) {
            count++;
        }

        System.out.println(count);
    }
}

输出:

1

请注意,\b它用作单词边界匹配器

从Java SE 9 开始,您可以使用Matcher#results来获取一个Stream可以调用的对象count,如下所示:

long count = matcher.results().count();

注意:我使用文本块功能使文本块看起来更具可读性。您可以以 Pre-Java15 的方式形成字符串。


推荐阅读