我正在使用此代码
Matcher m2 = Pattern.compile("\\b[ABE]+\\b").matcher(key);
仅从HashMap
获取包含字母A,B或E
我虽然对AAAAAA或EEEEE这样的词感兴趣但我需要至少有两个不同字母的单词(最好的情况是三个)。
有没有办法修改正则表达式?任何人都可以提供这方面的见解吗?
答案 0 :(得分:1)
替换除字母以外的所有内容,制作一组结果,测试Set的大小。
public static void main (String args[])
{
String alphabet = "ABC";
String totest = "BBA";
if (args.length == 2)
{
alphabet = args[0];
totest = args[1];
}
String cleared = totest.replaceAll ("[^" + alphabet + "]", "");
char[] ca = cleared.toCharArray ();
Set <Character> unique = new HashSet <Character> ();
for (char c: ca)
unique.add (c);
System.out.println ("Result: " + (unique.size () > 1));
}
示例实现
答案 1 :(得分:0)
您可以使用更复杂的正则表达式来执行此操作,例如
(.*A.*[BE].*|.*[BE].*A.*)|(.*B.*[AE].*|.*[AE].*B.*)|(.*E.*[BA].*|.*[BA].*E.*)
但是进行某种替换可能会更容易理解,例如使用''创建一个一次替换一个字母的循环,并且每次检查新字符串的大小 - 如果它发生变化两次字符串的大小,然后你有两个你想要的字符。 编辑:实际上,如果您在之前知道运行之前所需的字符集进行检查,那么NullUserException在其评论中将其正确 - indexOf
或{{ 1}}会比这更有效,也可能更具可读性。
请注意,如果您在编译时未知所需的字符集(或至少在运行时进行字符串检查),则第二个选项更可取 - 如果您正在寻找任何字符,只需替换contains
循环中第一个字符的出现次数 - 它循环的次数就是你得到的不同字符的数量。
答案 2 :(得分:-1)
明确标记所需字母的重复, 它看起来像这样:
\b[ABE]{1,3}\b
它符合AAE,EEE,AEE但不符合AAAA,AAEE