【问题标题】: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 个并发用户,如果这段代码有任何漏洞,请告诉我??

请分享你的看法

提前致谢

【问题讨论】:

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

标签: java


【解决方案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 的上下文中,您不需要^$ 锚点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-16
    • 2023-03-31
    • 2016-02-18
    • 2011-11-27
    • 2021-03-18
    • 2013-02-13
    相关资源
    最近更新 更多