Java 如何使用正则表达式检查字符串是否只包含特定字符

Java 如何使用正则表达式检查字符串是否只包含特定字符,java,regex,string,Java,Regex,String,我在Java中有一长串数字。我想找出字符串中是否包含任何一个数字0,1,4,6,8,9。我不想检查我的字符串是否只包含任何随机数字 if (preg_match('/[^|]/', $string)) { // string contains characters other than | } 我不在乎数字出现多少次。如果上面的任何一个数字在字符串中出现一次,我想在这里停止并返回true 什么正则表达式可以用来匹配这个字符串 有没有比使用正则表达式更快的方法?

我在Java中有一长串数字。我想找出字符串中是否包含任何一个数字0,1,4,6,8,9。我不想检查我的字符串是否只包含任何随机数字

if (preg_match('/[^|]/', $string)) {    
// string contains characters other than |  
}          
我不在乎数字出现多少次。如果上面的任何一个数字在字符串中出现一次,我想在这里停止并返回true

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

有没有比使用正则表达式更快的方法? 我正在使用Java8

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

if (preg_match('/[^|]/', $string)) {    
// string contains characters other than |  
}          
或:

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

您可以使用模式
*[014689].*
以及:


假设您的字符串非常大,您必须从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以提高性能。

可以帮助您测试您的regex.hmmm如果您参加一些regex教程,您将自己找到解决方案,无论如何,我认为真正的问题是“有没有比使用regex更快的方法”不,这只是回答了我问题的第一部分。如果可能的话,我仍然在寻找一种更快的方法。如果是这样的话,你不应该接受它(对不起,蒂姆:)