2017-02-23 54 views
-2

我在Java中有一长串数字。我想查找字符串中是否包含数字0,1,4,6,8,9中的任何一个。 我不想检查我的字符串是否包含任何随机数字。如何检查一个字符串是否只包含使用正则表达式的字符

我不在乎数字出现的次数。如果任何一个上述数字在字符串中出现一次,我想停在那里并返回true。

什么正则表达式可以用来匹配这个字符串?

有没有更快的方式来做到这一点,而不是使用正则表达式? 我正在使用Java 8.

编辑:我已经在网上找到了很多解决方案来检查一个字符串是否包含数字。这些解决方案在这里不起作用,因为我想优化找出我的字符串(长度〜10^15个字符)是否包含特定数字。

+1

https://www.debuggex.com/可以帮助你测试你的正则表达式。 – Tome

+0

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

+0

嗯,如果你采取一些正则表达式教程,你会想出自己的解决方案,无论如何,我认为真正的问题是“有没有比使用正则表达式更快的方式” – niceman

回答

1

您可以String.matches()一起使用模式.*[014689].*

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(); 
} 

你可以在哪里调整buffersize的性能。

相关问题