gpt4 book ai didi

java - 如何检查正则表达式匹配是否可以穷尽字符串?

转载 作者:行者123 更新时间:2023-12-02 00:04:36 25 4
gpt4 key购买 nike

所以问题是确定字符串中的每个字符是否都包含在特定正则表达式的匹配中。或者,换句话说,如果可以包含在特定正则表达式的某些匹配中的所有字符位置的集合包括字符串中的所有字符位置。

我的想法是做这样的事情:

boolean matchesAll(String myString, Matcher myMatcher){
boolean matched[] = new boolean[myString.size()];
for(myMatcher.reset(myString); myMatcher.find();)
for(int idx = myMatcher.start(); idx < myMatcher.end(); idx++)
matched[idx] = true;

boolean allMatched = true;
for(boolean charMatched : matched)
allMatched &= charMatched;

return allMatched
}

但是有更好的方法吗?

此外,当我写这篇文章时,我想到在类似的情况下这不会达到我想要的效果

matchesAll("abcabcabc", Pattern.compile("(abc){2}").matcher()); //returns false

因为 Matcher 仅尝试从上一场比赛结束时开始匹配。我希望它返回 true,因为如果您在位置 3 处启动匹配器,它可能会在匹配中包含第三个 abc

boolean matchesAll(String myString, Matcher myMatcher){

boolean matched[] = new boolean[myString.size()];
boolean allMatched = true;

for(int idx = 0; idx < myString.size() && myMatcher.find(idx);
idx = myMatcher.start() + 1) {

for(int idx2 = myMatcher.start(); idx2 < myMatcher.end(); idx2++)
matched[idx2] = true;
}

boolean allMatched = true;
for(boolean charMatched : matched)
allMatched &= charMatched;

return allMatched;
}

有什么方法可以让这段代码更好、更快或者更具可读性吗?

最佳答案

我有 2 个答案给你,尽管我不确定我是否正确理解了这个问题。

  1. 调用 Pattern.matcher(str2match).matches() 方法而不是 find()。一次,真正的返回值将告诉您整个字符串是否匹配。
  2. 在正则表达式前面添加“^”(字符串开头),并在“Pattern.compile(str)”之前添加“$”(表示字符串结尾) - 正则表达式。

这两种解决方案也可以结合使用。下面是一个示例类 - 您可以将其复制到 AllMatch.java 中,使用“javac AllMatch.java”编译它并将其作为“java AllMatch”运行(我假设您的 CLASSSPATH 中有“.”)。只需选择您认为更优雅的解决方案即可:) 新年快乐!

import java.util.regex.Pattern;

公共(public)类 AllMatch {

private Pattern pattern;

public AllMatch (String reStr) {
pattern = Pattern.compile ("^" + reStr + "$");
}

public boolean checkMatch (String s) {
return pattern.matcher(s).matches();
}

public static void main (String[] args) {
int n = args.length;
String rexp2Match = (n > 0) ? args[0] : "(abc)+",
testString = (n > 1) ? args[1] : "abcabcabc",
matchMaker = new AllMatch (rexp2Match)
.checkMatch(testString) ? "" : "un";
System.out.println ("[AllMatch] match " + matchMaker +
"successful");
}

}

关于java - 如何检查正则表达式匹配是否可以穷尽字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14112331/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com