当前位置: 首页 > 面试题库 >

检测字符串是否为数字的最优雅方法?

宗政斌
2023-03-14
问题内容

有没有比这更好,更优雅(和/或更快)的方式

boolean isNumber = false;
try{
   Double.valueOf(myNumber);
   isNumber = true;
} catch (NumberFormatException e) {
}

…?

编辑 :因为我不能选择两个答案,所以我要使用正则表达式,因为a)很优雅,并且b)说“ Jon Skeet解决了问题”是一种重言式,因为Jon
Skeet自己就是所有问题的解决方案。


问题答案:

我不认为Java有任何内置功能可以更快,更可靠地完成此操作,但前提是您稍后希望使用Double.valueOf(或类似功能)对其进行解析。

我会使用Double.parseDouble而不是Double.valueOf来避免不必要地创建Double, 并且 通过检查数字,e /
E,-和,您也可以比异常情况更快地摆脱公然愚蠢的数字。预先。因此,类似:

public boolean isDouble(String value)
{        
    boolean seenDot = false;
    boolean seenExp = false;
    boolean justSeenExp = false;
    boolean seenDigit = false;
    for (int i=0; i < value.length(); i++)
    {
        char c = value.charAt(i);
        if (c >= '0' && c <= '9')
        {
            seenDigit = true;
            continue;
        }
        if ((c == '-' || c=='+') && (i == 0 || justSeenExp))
        {
            continue;
        }
        if (c == '.' && !seenDot)
        {
            seenDot = true;
            continue;
        }
        justSeenExp = false;
        if ((c == 'e' || c == 'E') && !seenExp)
        {
            seenExp = true;
            justSeenExp = true;
            continue;
        }
        return false;
    }
    if (!seenDigit)
    {
        return false;
    }
    try
    {
        Double.parseDouble(value);
        return true;
    }
    catch (NumberFormatException e)
    {
        return false;
    }
}

请注意,尽管进行了几次尝试,但这 仍然 无法覆盖“ NaN”或十六进制值。是否要通过这些取决于上下文。

以我的经验,正则表达式比上面的硬编码检查要慢。



 类似资料:
  • 本文向大家介绍检查Python中字符串是否为空的最优雅的方法是什么?,包括了检查Python中字符串是否为空的最优雅的方法是什么?的使用技巧和注意事项,需要的朋友参考一下 空字符串是“虚假的”,这意味着它们在布尔上下文中被认为是错误的,因此您只能使用非字符串。   示例 输出结果 这将给出输出: 示例 如果您的字符串可以有空格,并且您仍然希望它的值为false,则可以剥离它并再次检查。例如: 输出

  • 问题内容: 检查字符串是否仅包含字母数字字符的最快方法是什么。 我有一些代码会占用大量CPU,我想知道是否有比使用预编译正则表达式更快的方法。 问题答案: 我已经编写了使用正则表达式(根据其他答案)与不使用正则表达式进行比较的测试。在运行Java 1.6的四核OSX10.8计算机上进行的测试 有趣的是,使用正则表达式比手动迭代字符串要慢5到10倍。此外,该功能比的速度略快。一种支持允许扩展Unic

  • 问题内容: 我有一个isNotEmpty函数,如果字符串不为空,则返回true;如果字符串为空,则返回false。我发现如果我通过它传递一个空字符串,它将无法正常工作。 使用isNotEmpty验证字符串: 如果该字符串为空,则其他字符串将不会执行,我不明白为什么,请有人对此有所帮助。 问题答案: 实际上是简单的问题。更改: 至 可以说,您可能还想将其更改为: 因为如果您传递的是数字0以及其他一些

  • 本文向大家介绍python 检查是否为中文字符串的方法,包括了python 检查是否为中文字符串的方法的使用技巧和注意事项,需要的朋友参考一下 【目标需求】 查看某一个字符串是否为中文字符串 【解决办法】 【举例检验】 问题解决! -----------------2018-07-27 更新----------------- 【更新】 上面的脚本实际上只识别了字符串的第一个字符,下面的版本则可以用

  • 问题内容: 就像标题说的那样。我想找出给定的java字符串是否包含表情符号。 我无法使用,因为这需要API级别19。 我找到了适用于iOS的代码,但实际上并不适用,因为它看起来像java和Objective- c以不同方式处理代理对。 我浏览过的文档告诉我: 我不太确定那是什么意思。这是否仅表示它们还将BMP点作为其第一个数字? 根据维基百科,表情符号集位于0x1f600和0x1f64f之间,但我

  • 我想删除字符串末尾的所有数字和符号。得到: 我可以剥离数字,但不能剥离。我该怎么做? 这是我到目前为止的代码: