gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 09:35:49 25 4
gpt4 key购买 nike

我有一个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/

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