我正在使用此代码
Matcher m2 = Pattern.compile("\\b[ABE]+\\b").matcher(key);
仅从 aHashMap
中获取包含字母 A、B 或 E 的密钥
虽然我对 AAAAAA 或 EEEEE 等单词不感兴趣,但我需要至少包含两个不同字母的单词(最好是三个)。
有没有办法修改正则表达式?任何人都可以对此提供见解吗?
我正在使用此代码
Matcher m2 = Pattern.compile("\\b[ABE]+\\b").matcher(key);
仅从 aHashMap
中获取包含字母 A、B 或 E 的密钥
虽然我对 AAAAAA 或 EEEEE 等单词不感兴趣,但我需要至少包含两个不同字母的单词(最好是三个)。
有没有办法修改正则表达式?任何人都可以对此提供见解吗?
替换除您的字母之外的所有内容,制作一组结果,测试该组的大小。
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));
}
示例实现
您可以使用更复杂的正则表达式来执行此操作,例如
(.*A.*[BE].*|.*[BE].*A.*)|(.*B.*[AE].*|.*[AE].*B.*)|(.*E.*[BA].*|.*[BA].*E.*)
但是进行某种替换可能会更容易理解,例如创建一个循环,一次用 '' 替换一个字母,并每次检查新字符串的大小 - 如果它改变了字符串两次,那么你就有了两个你想要的字符。编辑:实际上,如果您在进行检查之前在运行时知道所需的字符集,NullUserException 在他的评论中是正确的 -indexOf
或者contains
会比这更有效并且可能更具可读性。
请注意,如果您的所需字符集在编译时未知(或至少在运行时进行预字符串检查),则第二个选项更可取 - 如果您正在寻找任何字符,只需替换所有出现的第一个字符循环while(str.length > 0)
- 它通过循环的次数是您拥有的不同字符的数量。
明确标记所需字母的重复,它看起来像这样:
\b[ABE]{1,3}\b
它匹配 AAE、EEE、AEE 但不匹配 AAAA、AAEE