2017-02-23 74 views
-2

У меня есть длинная строка цифр в Java. Я хочу найти строку, содержащую любую цифру 0,1,4,6,8,9 или нет. Я не хочу проверять, содержит ли моя строка только произвольные цифры или нет.Как проверить, содержит ли строка только особые символы с использованием regex

Меня не волнует, сколько раз цифра присутствует. Если какая-либо из вышеуказанных цифр присутствует в строке даже один раз, я хочу остановиться прямо и вернуть true.

какое регулярное выражение можно использовать для соответствия этой строке?

Есть ли более быстрый способ сделать это вместо использования регулярного выражения? Я использую Java 8.

EDIT: Я уже нашел много решений в Интернете, проверяя, содержит ли строка цифры или нет. Эти решения не работают здесь, потому что я хочу оптимально узнать, имеет ли моя строка (длиной ~ 10^15 символов) определенные цифры или нет.

+1

https://www.debuggex.com/ может помочь вам протестировать ваше регулярное выражение. – Tome

+0

http://stackoverflow.com/a/18591205/7118307 –

+0

Хммм, если вы возьмете какое-нибудь учебное пособие по регулярному выражению, вы бы разобрались в решении самостоятельно, так или иначе, я думаю, что реальный вопрос: «есть ли более быстрый способ, чем использовать регулярное выражение»? – niceman

ответ

1

Вы можете использовать шаблон .*[014689].* вместе с String.matches():

String input = "1 Hello World"; 
if (input.matches(".*[014689].*")) { 
    System.out.println("Match!"); 
} 
-2
if (preg_match('/[^|]/', $string)) {  
// string contains characters other than | 
}   

или:

if (strlen(str_replace('|', '', $string)) > 0) { 
// string contains characters other than | 
} 
0

Предполагая, что ваша строка настолько очень большой, что вы должны прочитать его из InputStream, Я бы посоветовал что-то подобное:

public static final Pattern TO_MATCH = Pattern.compile("[014689]"); 

public static boolean hasDigits(InputStream is, int bufferSize){ 
    BufferedReader l_read = new BufferedReader(new InputStreamReader(is, Charset.defaultCharset()),bufferSize); 
    return l_read.lines().filter(s -> TO_MATCH.matcher(s).find()).findAny().isPresent(); 
} 

Где вы можете настроить буферизацию для производительности.