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

2023-11-26

有没有比这更好、更优雅(和/或可能更快)的方法

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

...?


Edit: 由于我无法选择两个答案,所以我选择正则表达式,因为 a)它很优雅,b)说“Jon Skeet 解决了问题”是同义反复,因为 Jon Skeet 本人就是所有问题的解决方案。


我不相信 Java 中有任何内置的东西可以更快、更可靠地完成它,假设稍后您会想要使用 Double.valueOf (或类似的)实际解析它。

我会使用 Double.parseDouble 而不是 Double.valueOf 以避免不必要地创建 Double,and您还可以通过检查数字、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;
    }
}

请注意,尽管尝试了几次,这still不涵盖“NaN”或十六进制值。您是否希望这些通过取决于上下文。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 本地开发的 Azure Functions 扩展包版本问题

    我有一个带有队列触发器的 Java 11 Azure 函数 该函数在部署到 Azure 时按预期工作 并正确从定义的服务总线主题中提取消息 但是 运行相同的功能locally除非我回滚版本 否则不起作用Azure Functions 绑定扩
  • 使用 Spring 控制器处理错误 404

    I use ExceptionHandler处理我的网络应用程序抛出的异常 在我的例子中我的应用程序返回JSON回应HTTP status用于对客户端的错误响应 但是 我正在尝试弄清楚如何处理error 404返回与处理的类似的 JSON
  • 以有效的方式从 Map 中删除多个键?

    我有一个Map
  • 在java中将字符串日期转换为美国格式

    我有下面的代码 其中日期为字符串类型 我必须将其设置为美国格式 所以下面我已经展示了它 private static final SimpleDateFormat usOutputDate new SimpleDateFormat MM d
  • 无法从资源加载图片

    So I am trying to load a image file from a resource so that when I export my application into a jar file it could be use
  • 确定序列化对象的类型

    我需要通过套接字发送消息 从用户到引擎的请求 以及从引擎到用户的响应 所以流程本质上是 serialized request Server lt network gt Client serialized response request r
  • java setFullScreenWindow 在 Mac 中隐藏登录对话框

    我使用的是全屏窗口 类似于屏幕保护程序 使用这里的方法 GraphicsEnvironment getLocalGraphicsEnvironment getDefaultScreenDevice setFullScreenWindow t
  • Java:SortedMap、TreeMap、可比较?如何使用?

    我有一个对象列表 需要根据其中一个字段的属性进行排序 我听说 SortedMap 和 Comparator 是实现此目的的最佳方法 我是否要与正在排序的类实现 Comparable 还是创建一个新类 如何实例化 SortedMap 并传入
  • 有一种简单的方法可以忽略时间戳来区分日志文件吗?

    我需要比较两个日志文件 但忽略每行的时间戳部分 确切地说是前 12 个字符 有没有一个好的工具 或者一个聪明的 awk 命令 可以帮助我 根据您使用的 shell 您可以改变方法 Blair https stackoverflow com
  • 生成 equals 和 hashcode 时忽略属性

    假设我有一个类 Customer public class Customer private String firstName private String lastName private String doNotAddMeToEqual
  • 为正则表达式编写解析器

    即使经过多年的编程 我很羞愧地说我从未真正完全掌握正则表达式 一般来说 当问题需要正则表达式时 我通常可以 在一堆引用语法之后 想出一个合适的正则表达式 但我发现自己越来越频繁地使用这种技术 所以 自学并理解正则表达式properly 我决
  • 如何在不反编译的情况下更改已编译的.class文件?

    我想更改 class 文件方法 我安装 JD Eclipse Decompiler 并打开 class 文件 我添加了一些代码并保存 class 文件 但是 class 文件没有改变 我不知道如何使用反编译器 如果可能的话 如何在不使用反编
  • Java 中 JButton 的击键/热键

    最初我使用 JMenu 并建立热键以使用加速器工作 它运行得很好 现在我想在 JButton 中实现相同的行为 但我陷入困境 这是我编写的代码 请分享您的想法 以便我可以走上正确的道路 import javax swing import j
  • C 与 C++ 中的 JNI 调用不同?

    所以我有以下使用 Java 本机接口的 C 代码 但是我想将其转换为 C 但不知道如何转换 include
  • 使用单独的线程在java中读取和写入文件

    我创建了两个线程并修改了 run 函数 以便一个线程读取一行 另一个线程将同一行写入新文件 这种情况会发生直到整个文件被复制为止 我遇到的问题是 即使我使用变量来控制线程一一执行 但线程的执行仍然不均匀 即一个线程执行多次 然后控制权转移
  • HTTP 状态 405 - 此 URL java servlet 不支持 HTTP 方法 POST [重复]

    这个问题在这里已经有答案了 我无法使页面正常工作 我有要发布的表单方法和我的 servlet 实现doPost 然而 它不断地向我表明我并不支持POST方法 我只是想做一个简单的网站并将值插入到我的 MySQL 数据库中 type Stat
  • 当底层连接是有状态时如何使用 Apache HttpClient?

    我在谷歌上搜索了很多关于如何使用 HttpClient 进行多线程处理的信息 他们中的大多数人建议使用 ThreadSafeClientConnManager 但我的应用程序必须登录某个主机 登录表单页面 以便 HttpClient 获得底
  • java中使用多线程调用同一类的不同方法

    我有一个类 如下所示 具有三种方法 public class MyRunnable implements Runnable Override public void run what code need to write here to c
  • Axis2 错误:要输出的文本中的空白字符 (0x4) 无效

    我创建了一个 Java 客户端 使用 Axis2 1 7 6 作为代码生成器与 SOAP Web 服务进行交互 问题在于客户端的某些输入抛出异常并显示以下消息 org apache axis2 AxisFault Invalid white
  • 如何使用自定义 JDK 构建 Jenkins 项目?

    我有一个常规的 Jenkins 实例 运行一些多分支管道 该实例在 JDK 11 上运行 因为 Jenkins 并不真正支持更高版本 没关系 但不好的是 我的所有管道似乎也都受到 Java 11 的限制 Jenkins 仅使用它自己也使用的

随机推荐

  • yocto:如何安装命令 locale 和 localedef?

    如何在 yocto 项目中为我的图像安装命令 locale 和 localedef 我已尝试以下操作 IMAGE INSTALL append glibc locale 但这不起作用 我该怎么做 locale位于一个名为glibc util
  • 了解 PKCE 与授权代码授予的优势

    我是 OAuth 世界的新手 我试图了解使用 PKCE 相对于传统授权代码授予的好处 我的许多假设可能是错误的 所以感谢您的指正 我是一名移动应用程序开发人员 根据 OAuth 文档 客户端机密不能在公共客户端的应用程序代码中进行硬编码 避
  • firebase云函数中的权限被拒绝

    在 firebase 云功能中 我在读取或写入实时数据库时在 admin firebase 上被拒绝访问 这https github com firebase firebase functions issues 16没有解决我的问题 App
  • DRF 中的动作装饰器不适用于 url_path

    我正在努力实现这样的终点 api messages
  • 为什么我不能使用urlencode编码json格式数据?

    我有一个关于 python 2 7 中的 urlencode 的问题 gt gt gt import urllib gt gt gt import json gt gt gt urllib urlencode json dumps titl
  • 实现 47 度 android-swipelistview 用于滑动 android ListViewItem

    实际上我的目标是在android中实现ListViewItem Swipe 我已经尝试过了 stackoverflow 有几个可以让你的 ListViewSwipe 的例子 例子 简单的滑动手势活动教程 从列表视图中滑动一项时在列表视图中显
  • 将程序加载到 RAM 并执行它们 NASM 16b

    我迫切需要解决这个问题 我正在尝试开发汇编代码 允许我加载和执行 通过用户的输入 2 个其他 Assembly EXE 程序 我有两个问题 我似乎无法将路径名分配给有效的寄存器 或者可能是错误的语法 我需要能够在第一个程序 可能是 开始执行
  • Python 对象删除自身

    为什么这不起作用 我正在尝试使类的实例删除自身 gt gt gt class A def kill self del self gt gt gt a A gt gt gt a kill gt gt gt a lt main A instan
  • SPA 中刷新令牌 Cookie 的 CSRF 保护

    我在 AngularJS SPA 中使用资源所有者密码凭据 OAuth 2 0 流程 有几篇文章 here here 以及答案这个问题这说明我们不应该将刷新令牌存储在 Web 客户端 LocalStorage 上 而是将它们加密存储在 Ht
  • 使用 android.telecom 和 InCallService 接听来电

    自 API 21 以来 Google 一直在添加功能android 电信总体而言 特别是通过实施更多成员电信经理并添加通话服务 最后一个应该允许非系统 第三方应用程序提供和替换系统呼叫应用程序通话中屏幕的功能 弹出并允许执行操作的窗口EXT
  • Asm代码解释

    以下 GCC 内联汇编取自 LuaJit 的 coco 库 有人可以逐行解释它的作用吗 static inline void coco switch coco ctx from coco ctx to asm volatile movl 1
  • tesseract 安装 mac 操作系统

    我正在尝试使用 homeBrew 在我的 mac 上安装 tesseract 当我尝试安装时 一切似乎都很好 但我收到以下错误 消息 Warning Could not link leptonica Unlinking Error The
  • shell脚本测试

    我正在尝试更新其他人编写的 bash 脚本 但遇到了一行我不确定的内容 谁能告诉我以下检查的作用 if RESULT 0 0 我假设它正在检查 RESULT 中的某些值 可能带有子字符串 任何帮助表示赞赏 命令 只是命令的别名test 右方
  • CORS 适用于对 API 的直接请求,但不适用于静态文件(如 css)

    我们正在开发一个由 Android 组成的项目Mobile App连同一个Web API Web API 是 Asp net MVC Core 我已经启用了CORS服务于我的Startup cs 因此移动应用程序 API 调用可以跨源访问
  • 迭代 std::deque 时擦除元素时出现分段错误

    为什么下面的代码会崩溃 当我通过反向迭代器进行迭代时应该做什么 那么如何删除单个元素呢 deque q q push back 4 q push back 41 q push back 14 for auto it q begin it q
  • pandas - 两列的直方图?

    我有这个数据 data pd DataFrame from dict r for r in response print data id total 0 213 1 1 194 3 2 205 156 现在 如果我打电话 data hist
  • 带有闪亮工具提示BS的反应式单选按钮

    我想创建一个radioButtons带有工具提示的小部件使用shinyBS 我想要实现的是创建一个带有 3 个按钮的小部件 其中包含不同的信息tooltip 基于此solution它创建了 3 个具有不同 id 值的独立单选按钮 是否可以做
  • intptr_t 是 uintptr_t 的有符号对应项(反之亦然)吗?

    我正在为 add signed MPL 类开发一些测试 将类型转换为其签名的对应项 它的定义如下 template
  • 在python中将url保存为文件名

    我有一个网址 例如 http example com here there index html 现在我想将文件及其内容保存在目录中 我希望文件名是 http example com here there index html 但我收到错误
  • 检测字符串是否为数字的最优雅的方法?

    有没有比这更好 更优雅 和 或可能更快 的方法 boolean isNumber false try Double valueOf myNumber isNumber true catch NumberFormatException e E