Если вы выполняете этот тип опроса символов часто в цикле, вы, возможно, не захотите использовать регулярное выражение вообще, а создадите свою собственную процедуру поиска, опрашивающую StringBuffer.
/**
* Method to evaluate a String to see whether it contains one (or potentially more) of a
* char or member of a group of chars.
*
* @param String to evaluate
*
* @param String containing all characters to evaluate against the subject string
*
* @return true on first correct match, false if no match found
**/
public boolean sbContainsOneOf(String sStringToCheck, String sCheck)
{
StringBuffer sb = new StringBuffer(sStringToCheck);
char[] tmp2 = sCheck.toCharArray();
for (int i = 0; i < sb.length(); i++)
{
for (int k = 0; k < tmp2.length; k++)
if (sb.charAt(i) == tmp2[k])
{
return true;
}
}
return false;
}
Тогда все, что вам нужно сделать, это позвонить:
String password = "s8bgBQYPmUaNjkToXCJLAwAA";
System.out.println(sbContainsOneOf(password,"0123456789"));
Это происходит в 10-15 раз быстрее ... Чем длиннее список строк и опций, тем больше становится разница между ними. Обычно я избегаю регулярных выражений, если только они не являются уникальными или чрезвычайно сложными для реализации в виде кода, и предпочитаю повторять их с помощью оптимизированных подпрограмм на основе StringBuffer. Делая это таким образом, постепенно ваша коллекция замен регулярных выражений заполняется, и вы в конечном итоге получаете очень полезный способ запроса шаблона без высоких сопутствующих издержек регулярного выражения.