简体   繁体   English

检查字符串中的非数字字符

[英]Check non-numeric characters in string

I want to check whether the String contains only numeric characters or it contains alpha-numeric characters too. 我想检查String是否只包含数字字符,还是包含字母数字字符。

I have to implement this check in database transaction where about a hundred-thousand records are going to be fetched and passed through this check, so I need optimized performance answer. 我必须在数据库事务中实现此检查,其中将获取大约十万条记录并通过此检查,因此我需要优化的性能答案。

Currently, I have implemented this through a try-catch block: I parsed the string in Integer in try block and checked for the NumberFormatException in the catch block. 目前,我已通过try-catch块实现了这一点:我在try块中解析了Integer中的字符串,并检查了catch块中的NumberFormatException。 Please suggest if I'm wrong. 如果我错了,请建议。

You can check this with a regex. 您可以使用正则表达式进行检查。

Suppose that (numeric values only): 假设(仅限数值):

String a = "493284835";
a.matches("^[0-9]+$"); // returns true

Suppose that (alphanumeric values only): 假设(仅限字母数字值):

String a = "dfdf4932fef84835fea";
a.matches("^([A-Za-z]|[0-9])+$"); // returns true

As Pangea said in the comments area : 正如Pangea在评论区域所说:

If the performance are critical, it's preferrable to compile the regex. 如果性能很关键,那么编译正则表达式是首选。 See below for an example : 请参阅下面的示例:

String a = "dfdf4932fef84835fea";
Pattern pattern = Pattern.compile("^([A-Za-z]|[0-9])+$");
Matcher matcher = pattern.matcher(a);

if (matcher.find()) {
    // it's ok
}

Just Googling, I found out this link 只是谷歌搜索,我发现了这个链接

 public boolean containsOnlyNumbers(String str) {        
        //It can't contain only numbers if it's null or empty...
        if (str == null || str.length() == 0)
            return false;

        for (int i = 0; i < str.length(); i++) {

            //If we find a non-digit character we return false.
            if (!Character.isDigit(str.charAt(i)))
                return false;
        }

        return true;
    }

Edit: A RegExp to check numeric should be : 编辑:要检查数字的RegExp应该是:

return yourNumber.matches("-?\\d+(.\\d+)?");

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM