你好我有一个看起来有点像
的字符串NCC_johjon (\users\johanjo\tomcattest\oysters\NCC_johjon, port 16001), utv_johjon (\users\johanjo\tomcattest\oysters\utv_johjon, port 16000)
并且可能有很多NCC_etskys,NCC_homyis等等,我想检查一下是否有一些部分说“NCC_joh”已经存在我尝试使用
if(oysters.contains("NCC_joh")){
System.out.println("HEJ HEJ HEJ HALLÅ HALLÅ HALLÅ");
}
但是如果那里有一个NCC_johjon它将进入if情况但我只想进入如果确切的那部分存在不再短而且.equal它需要看起来像整个字符串这不是我的意思想要么。有人不知道吗?如果我使用的是一个字符串列表,但我没有那个。 oysterPaths最初是一个集合
Collection<TomcatResource> oysterPaths = TomcatResource.listCats(Paths.get(tomcatsPath));
答案 0 :(得分:2)
使用正则表达式。
if (oysters.matches("(?s).*\\bNCC_joh\\b.*")) {
,其中
(?s)
=单线模式,DOT-ALL,因此.
也会匹配换行符。.
=任何字符.*
=零次或多次出现.
(任何字符)\b
=字边界 String.matches
匹配整个字符串上的模式,因此在开始和结束时需要.*
。
(字边界当然意味着,它们之间必须放置字。)
答案 1 :(得分:2)
这与https://stackoverflow.com/a/49879388/2735286类似,但我建议使用此正则表达式使用find
方法:
\bNCC_joh\b
使用find方法将简化正则表达式,您将专门搜索相关内容。
以下是您可以使用的相应方法:
public static boolean superExactMatch(String expression) {
Pattern p = Pattern.compile("\\bNCC_joh\\b", Pattern.MULTILINE);
final Matcher matcher = p.matcher(expression);
final boolean found = matcher.find();
if(found) {
// For debugging purposes to see where the match happened in the expression
System.out.println(matcher.start() + " " + matcher.end());
}
return found;
}