java - 如何检查 ArrayMap.keySet() 是否包含某个变量+正则表达式?

标签 java android regex contains

我有一个ArrayMap,其中的类似于标签 - randomWord。我想检查键的 tag 部分是否与某个变量匹配。

我尝试过使用Patterns,但没有成功。目前我可以让它工作的唯一方法是迭代 for 循环中的所有键,然后在 ' - ' 上拆分键,并获取第一个值,与我的变量进行比较。

for (String s : testArray) {
    if ((s.split("(\\s)(-)(\\s)(.*)")[0]).equals(variableA)) {
        // Do stuff
    }
}

这对我来说似乎非常狡猾,特别是因为我只需要知道keySet包含变量,这就是我感兴趣的。我在想使用 contains() 方法,并放入 (variableA + "(\\s)(-)(\\s)(.*)"),但是似乎不起作用。

对于这种情况,有没有办法使用 .contains() 方法,或者我是否必须手动循环键?

最佳答案

您应该将这些任务分为两个步骤 - 首先提取标签,然后进行比较。您的代码应如下所示:

for (String s : testArray) {
  if (arrayMap. keySet().contains(extractTag(s)) {
    // Do stuff
  }
}

请注意,我们已将我们的关注点分为两个步骤,以便更轻松地单独验证每个步骤是否正确运行。所以现在的问题是“我们如何实现 extractTag()?”

正则表达式中的 ( ) 符号创建 group match ,您可以通过Matcher.group()检索- 如果您只关心标签,您可以使用Pattern,如下所示:

"(\\S+)\\s-\\s.*"

在这种情况下,您的 extractTag() 方法将如下所示:

private static final Pattern TAG_PATTERN = Pattern.compile("(\\S+)\\s-\\s.*");
private static String extractTag(String s) {
  Matcher m = TAG_PATTERN.matcher(s);
  if (m.matches()) {
    return m.group(1);
  }
  throw new IllegalArgumentException(
    "'" + s + "' didn't match " TAG_PATTERN.pattern());
}

如果您更愿意使用String.split(),您只需定义一个与分隔符匹配的正则表达式,在本例中为-;您可以在 split() 调用中使用以下正则表达式:

"\\s-\\s"

\\s 之后使用 + 通常是一个好主意,以支持一个或多个空格,但这取决于您需要处理的输入。如果您知道它始终是一个空格后跟一个破折号后跟一个空格,您可以拆分为:

" - "

在这种情况下,您的 extractTag() 方法将如下所示:

private static String extractTag(String s) {
  String[] parts = s.split(" - ");
  if (parts.length > 1) {
    return s[0];
  }
  throw new IllegalArgumentException("Could not extract tag from '" + s + "'");
}

关于java - 如何检查 ArrayMap.keySet() 是否包含某个变量+正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38943544/

相关文章:

java - 值堆栈中的 Struts 2 数组列表

android - 在 Android 中使用 jCIFS 时出现 VerifyError

asp.net - 使用 JQuery 替换 ASP.NET 中的部分图像 url

c# - 用于更改 html <br> 标记的不区分大小写的正则表达式

php - 根据模式解析字符串

java - 从 Eclipse 中将带有 JavaFX WebView 组件的 SWT 作为 Runnable JAR 导出导致 NullPointerException

java - 自定义 UserDetailsS​​ervice 似乎没有 Autowiring

java - Maven Jar插件怪异错误NoClassDefFoundError : javá/nio/fiìe/FileStore

android - SearchView 中的文本输入不显示

java - Android 使用 Arrays.asList 方法创建不正确的数组列表