当前位置: 首页 > 知识库问答 >
问题:

如何在java中比较整个字符串中的单词并增加其计数?

容修贤
2023-03-14

我有一个字符串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"
)

我想数一数回购的数量。在这整条线上。所以,我试着用这种方法,但它不起作用。

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.中只看到一次。我的输出需要是计数是: 1

共有2个答案

严兴旺
2023-03-14

这里可能有两个问题。是一个特殊的符号,它只代表一个字符。所以你的REPO. test不匹配。

第二个问题是equals方法。您应该使用matcher或只按正则表达式过滤,然后计数。

我会这样做:

int count = Pattern.compile("\\s").splitAsStream(replacedtext)
    .filter(Pattern.compile("\\bREPO\\b").asPredicate())
    .count()
System.out.println(count);
左丘照
2023-03-14

w.equals(\\bREPO\\b”)w的内容与\\bREPO进行比较\\b按字面意思,因此您得到的结果是错误的。

您可以使用正则表达式API计算REPO的出现次数。

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用作单词边界匹配器。

JavaSE 9起,您可以使用匹配器#结果获得一个Stream,您可以在其中调用Count,如下所示:

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

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

 类似资料:
  • 我试图比较两个字符串并识别重复的单词。例如 比较String1和String2将返回单词;“名字”。 我知道有可能将这两个字符串拆分成一个单词数组,然后在二维数组中迭代每个字符串的每个单词。然而,在O(n^2)时,这在计算上是昂贵的,我想知道是否有更快的方法? 谢谢。 编辑:为了清晰起见更改了示例。

  • 我已经声明了一个实现可比较接口和compareTo方法的类,使用employee ID比较两个员工。创建的类对象插入数组列表。现在,当我使用collections.sort(arrayList对象)时,它工作得很好。我对collective和comparator接口之间的比较有何不同感到困惑。我想知道如何在纯粹由数字组成的employee id字符串和其他字符串employee id之间进行比较,

  • 问题内容: 我有一个程序正在制作,当用户输入一种心情时,它将在此基础上输出报价。我需要告诉程序 问题是,我不知道如何使程序识别输入并基于该输出文本…这是到目前为止我所拥有的代码。 问题答案: 首先,看起来您正在处理错误的变量。我想你打算比较。 处理字符串时,请始终使用而不是。比较参考值(通常不可靠),同时比较实际值。 将您的字符串转换为全部大写或全部小写也是一个好习惯。在本示例中,我将使用小写字母

  • 问题内容: 在java中如何比较字符串,使用==还是equals 问题答案: == 测试引用是否相等(它们是否是同一对象)。 .equals() 测试值是否相等(在逻辑上是否为“相等”)。 String.contentEquals() 将的内容String与任何内容进行比较CharSequence(从Java 1.5开始可用)。 因此,如果要测试两个字符串是否具有相同的值,则可能要使用Object

  • 问题内容: 到目前为止,我一直在程序中使用运算符比较所有字符串。但是,我遇到了一个错误,将其中一个更改为错误,并修复了该错误。 是==坏?什么时候应该使用它,不应该使用它?有什么不同? 问题答案: 测试引用是否相等(它们是否是同一对象)。 测试值是否相等(在逻辑上是否为“相等”)。 在调用之前进行检查,因此您不必(在JDK7起可用,在Guava中也可用)。 因此,如果要测试两个字符串是否具有相同的

  • 问题内容: 我正在尝试计算SQL字符串中有多少个单词。 我想显示字数。在给定的示例中,尽管单词之间可能有多个空格,但将为3个单词。 问题答案: 您可以使用与此类似的内容。这将获取字符串的长度,然后减去空格后减去字符串的长度。然后,将数字加到第一应该给你的单词数: 参见带有演示的SQL Fiddle 如果您使用以下数据: 和查询: 结果是: