检查字符串是不是为有效数字的逻辑[重复]

Posted

技术标签:

【中文标题】检查字符串是不是为有效数字的逻辑[重复]【英文标题】:Logic to check if the String is a valid number or not [duplicate]检查字符串是否为有效数字的逻辑[重复] 【发布时间】:2013-08-07 08:51:27 【问题描述】:

我正在使用以下逻辑来检查收到的字符串是否为有效数字

package com;


public class Test 
    public static void main(String args[]) 
        String str = "122";
        boolean b = isNumb(str);
        System.out.println(b);
    

    public static boolean isNumb(String str) 
        String s = str;
        for (int i = 0; i < s.length(); i++) 
            if (!Character.isDigit(s.charAt(i)))
                return false;
        
        return true;
    


我将在一个高度多线程的环境中使用它,一次可以有 800 - 900 个并发用户,如果这段代码有任何漏洞,请告诉我??

请分享你的看法

提前致谢

【问题讨论】:

你能用这样的东西吗? ***.com/questions/1102891/… 顺便说一句,您的代码不适用于浮点数,甚至不讨论十六进制之类的东西。 你的方法完全没问题。另一种选择是使用str.toCharArray() 并直接检查生成的char[],而不是检查charAt() 方法中的边界。但我认为您不会注意到小字符串的性能改进(尤其是与生成的需要收集的垃圾 char[] 相比)。 您的代码会因负数而中断:) @anubhava 矫枉过正? :p 【参考方案1】:

我会使用正则表达式:

public static boolean isNumb(String str) 
    return str.matches("\\d+");

若要对负数也返回 true,请添加可选的前导破折号:

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

【讨论】:

@giorashc 这是 OP 编写的代码的替代方案,它不检查负数。但你当然有道理。 正则表达式会比检查每个字符慢。 @giorashc 我添加了负数支持【参考方案2】:

用于验证给定字符串是否为有效数字(不仅仅是整数):

boolean b = str.matches("^[+-]?(?=.)\\d*(\\.\\d+)?$");

【讨论】:

【参考方案3】:

我只需执行以下操作来检查字符串是否为数字:

try 
    final Integer i = Integer.parseInt("Your String");
 catch(final NumberFormatException nfe) 
    //String is no number

【讨论】:

检查失败时会出现性能问题。这是“使用异常进行流控制”反模式的一个例子。不过,它一种可靠的方法。 @MarkoTopolnik 如果预计大多数输入将是数字,这是一个很好的折衷方案(在不引发异常的情况下,性能与 char 上的循环一样好)。 @assylias 就个人而言,我很少使用其他任何东西,主要是因为可靠性方面。我的正则表达式或我可能拥有的任何其他复杂逻辑总是有问题。其实我有点气 JDK 本身没有提供非抛出方法。【参考方案4】:

有更好的方法来检查字符串是否为数字,例如使用正则表达式。

s.matches("^-?\\d+(\\.\\d)?$")

会很容易的获取字符串是否为数字,其中 s 是你的字符串。

【讨论】:

这只允许保留一位小数。而在matches 的上下文中,您不需要^$ 锚点。

以上是关于检查字符串是不是为有效数字的逻辑[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在python中检查字符串是不是为数字[重复]

在将字符串转换为 int 之前检查字符串是不是不是数字 [重复]

用于检查值是不是在列表中的逻辑不适用于 set

为了检查两个字符串是不是是字谜, hashfunction() 的逻辑应该是啥?

检查字符串是不是是十六进制数的有效表示

如何检查字符串是不是是有效的 XML 元素名称?