如何在java中比较整个字符串中的单词并增加其计数?
我有一个如何在java中比较整个字符串中的单词并增加其计数?,java,Java,我有一个字符串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" ) 我想计算整个字
字符串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
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
用作
Java SE 9之后,您可以使用获取一个流
,您可以调用该流,如下所示:
long count = matcher.results().count();
注意:我曾经让文本块看起来更可读。您可以用Java15之前的方式形成字符串。这里可能有两个问题
是一种特殊符号,它只表示一个字符。因此,您的回购测试将不匹配
第二个问题是equals
方法。您应该使用matcher
或只按正则表达式过滤,然后计数
我会这样做:
int count = Pattern.compile("\\s").splitAsStream(replacedtext)
.filter(Pattern.compile("\\bREPO\\b").asPredicate())
.count()
System.out.println(count);
int count=(int)matcher.results().count()代码>