字符串相等/包含它们没有得到我想要的

时间:2018-04-17 13:03:46

标签: java

你好我有一个看起来有点像

的字符串
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));

2 个答案:

答案 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;
}