如何检查ArrayMap.keySet()是否包含某个变量+ Regex?

时间:2016-08-14 15:11:04

标签: java android regex contains

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

我曾尝试弄乱Patterns,但没有成功。我现在唯一能让这个工作的方法就是遍历for循环中的所有键,然后在' - '上拆分键,并从中获取第一个值,与我的相比较变量

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

这对我来说似乎非常狡猾,特别是因为我只需要知道keySet 是否包含变量,这是我感兴趣的所有内容。我我正在考虑使用contains()方法,然后输入(variableA + "(\\s)(-)(\\s)(.*)"),但这似乎不起作用。

有没有办法在这种情况下使用.contains()方法,还是我必须手动循环键?

1 个答案:

答案 0 :(得分:1)

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

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

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

正则表达式中的( )符号会创建group match,您可以通过Matcher.group()检索该代码 - 如果您只关心tag,则可以使用{{1}像这样:

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()