字符串到数字转换的性能问题

2023-12-10

我有空格分隔的字符串,其中包含中间的数字,例如:

"abc123 ws32wd3 y3tg43 5tga89 a1a"

我必须解析字符串以获取每个标记中的数字,然后总结从标记中提取的所有数字。我写了下面的代码,但我认为,如果有很大的字符串,那么可能会出现性能问题。

所以,我的问题是:

  1. 我们如何提高下面代码的性能?

  2. 我们是否可以通过另一种方式编写下面的代码来解决这个问题?

Code:

public class TestSum {

    public static int doSum(String str){
        String[] sArray = str.split(" ");
        char[] chr = null;
        String temp;
        String number = "";
        int sum=0;
        for(String s : sArray){
            chr = s.toCharArray();
            for(char c : chr){
                temp = String.valueOf(c);
                if(isNum(temp)){
                    number = number + temp;
                }           
            }
            sum = sum + Integer.parseInt(number);
            number="";
        }       
        return sum;
    }

    public static boolean isNum(String nStr){   
        try{
            Integer.parseInt(nStr);
            return true;
        }catch(NumberFormatException nfe){
            return false;
        }       
    }

    public static void main(String[] args) {
        System.out.println("Sum is "+ TestSum.doSum("abc123 ws32wd3 y3tg43 5tga89 a1a"));
    }
} 

这是我能想到的最快的:

public static int getSum(String str) 
{
    int sum = 0;
    int exp = 1;      
    for (int i = str.length() - 1; i >= 0; i--) 
    {
        final char c = str.charAt(i);
        if (c >= '0' && c <= '9')
        {
            sum += (c - '0') * exp;
            exp *= 10;
        }
        else
        {
            exp = 1;
        }
    }
    return sum;
}

它从右到左迭代字符串。因此,当它“看到”一个数字时,它可以添加适当的值,具体取决于数字中“看到”的小数位置。

基准 using Caliper

结果与中不同davecom 的基准:

AUTHOR       RUNTIME (NS)   HOW MANY TIMES FASTER THAN JUNS
-----------------------------------------------------------
Adam              66.221                                600
Old              579.873                                 70
Prabhakaran   20,012.750                                  2 (2x faster than Juns)
Juns          39,681.074                                  1
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

字符串到数字转换的性能问题 的相关文章

  • Java JDBC:更改表

    我希望对此表进行以下修改 添加 状态列 varchar 20 日期列 时间戳 我不确定该怎么做 String createTable Create table aircraft aircraftNumber int airLineCompa
  • 如何找到给定字符串的最长重复子串

    我是java新手 我被分配寻找字符串的最长子字符串 我在网上研究 似乎解决这个问题的好方法是实现后缀树 请告诉我如何做到这一点或者您是否有任何其他解决方案 请记住 这应该是在 Java 知识水平较低的情况下完成的 提前致谢 附 测试仪字符串
  • 如何替换 pandas 数据框列中的重音符号

    我有一个数据框dataSwiss其中包含瑞士城市的信息 我想用普通字母替换带有重音符号的字母 这就是我正在做的 dataSwiss Municipality dataSwiss Municipality str encode utf 8 d
  • 无法展开 RemoteViews - 错误通知

    最近 我收到越来越多的用户收到 RemoteServiceException 错误的报告 我每次给出的堆栈跟踪如下 android app RemoteServiceException Bad notification posted fro
  • 加速代码 - 3D 数组

    我正在尝试提高我编写的一些代码的速度 我想知道从 3d 整数数组访问数据的效率如何 我有一个数组 int cube new int 10 10 10 我用价值观填充其中 然后我访问这些值数千次 我想知道 由于理论上所有 3d 数组都存储在内
  • Liferay ClassNotFoundException:DLFileEntryImpl

    在我的 6 1 0 Portal 实例上 带有使用 ServiceBuilder 和 DL Api 的 6 1 0 SDK Portlet 这一行 DynamicQuery query DynamicQueryFactoryUtil for
  • 磁模拟

    假设我在 n m 像素的 2D 表面上有 p 个节点 我希望这些节点相互吸引 使得它们相距越远吸引力就越强 但是 如果两个节点之间的距离 比如 d A B 小于某个阈值 比如 k 那么它们就会开始排斥 谁能让我开始编写一些关于如何随时间更新
  • Draggable JS Bootstrap 模式 - 性能问题

    对于工作中的项目 我们在 JavaScript 中使用 Bootstrap Modal 窗口 我们想让一些窗口可移动 但我们遇到了 JQuery 的性能问题 myModal draggable handle modal header Exa
  • Mockito when().thenReturn 不必要地调用该方法

    我正在研究继承的代码 我编写了一个应该捕获 NullPointerException 的测试 因为它试图从 null 对象调用方法 Test expected NullPointerException class public void c
  • 无法解析插件 Java Spring

    我正在使用 IntelliJ IDEA 并且我尝试通过 maven 安装依赖项 但它给了我这些错误 Cannot resolve plugin org apache maven plugins maven clean plugin 3 0
  • 十进制到八进制的转换[重复]

    这个问题在这里已经有答案了 可能的重复 十进制转换错误 https stackoverflow com questions 13142977 decimal conversion error 我正在为一个类编写一个程序 并且在计算如何将八进
  • 为什么HashMap不能保证map的顺序随着时间的推移保持不变

    我在这里阅读有关 Hashmap 和 Hashtable 之间的区别 http javarevisited blogspot sg 2010 10 difference Between hashmap and html http javar
  • 如何在 javadoc 中使用“<”和“>”而不进行格式化?

    如果我写
  • 如何在桌面浏览器上使用 webdriver 移动网络

    我正在使用 selenium webdriver 进行 AUT 被测应用程序 的功能测试自动化 AUT 是响应式网络 我几乎完成了桌面浏览器的不同测试用例 现在 相同的测试用例也适用于移动浏览器 因为可以从移动浏览器访问 AUT 由于它是响
  • 编译器抱怨“缺少返回语句”,即使不可能达到缺少返回语句的条件

    在下面的方法中 编译器抱怨缺少退货声明即使该方法只有一条路径 并且它包含一个return陈述 抑制错误需要另一个return陈述 public int foo if true return 5 鉴于Java编译器可以识别无限循环 https
  • 将控制台重定向到 .NET 程序中的字符串

    如何重定向写入控制台的任何内容以写入字符串 对于您自己的流程 Console SetOut http msdn microsoft com en us library system console setout aspx并将其重定向到构建在
  • 捕获的图像分辨率太大

    我在做什么 我允许用户捕获图像 将其存储到 SD 卡中并上传到服务器 但捕获图像的分辨率为宽度 4608 像素和高度 2592 像素 现在我想要什么 如何在不影响质量的情况下获得小分辨率图像 例如我可以获取或设置捕获的图像分辨率为原始图像分
  • 有没有办法为Java的字符集名称添加别名

    我收到一个异常 埋藏在第 3 方库中 消息如下 java io UnsupportedEncodingException BIG 5 我认为发生这种情况是因为 Java 没有定义这个名称java nio charset Charset Ch
  • 当我从 Netbeans 创建 Derby 数据库时,它存储在哪里?

    当我从 netbeans 创建 Derby 数据库时 它存储在哪里 如何将它与项目的其余部分合并到一个文件夹中 右键单击Databases gt JavaDB in the Service查看并选择Properties This will
  • 如何实现仅当可用内存较低时才将数据交换到磁盘的写缓存

    我想将应用程序生成的数据缓存在内存中 但如果内存变得稀缺 我想将数据交换到磁盘 理想情况下 我希望虚拟机通知它需要内存并将我的数据写入磁盘并以这种方式释放一些内存 但我没有看到任何方法以通知我的方式将自己挂接到虚拟机中before an O

随机推荐

  • 是否可以创建一个完全独立的 Python 包?

    问题 Ansible 是一个 python 模块 可通过 pip 安装 它依赖于几个依赖项 还有 pip 模块 是否可以将所有这些依赖项和 Ansible 本身 汇总 到某种单一包中 无需 root 即可离线安装 最好不需要 pip 进行安
  • 如何可靠地获取 Outlook 2013 插件中联系人上下文菜单的对象?

    我正在向上下文菜单添加一个条目Contact在 Outlook 2013 中如下本文中的示例 这是 XML
  • 在 CMAKE 自定义命令中运行 objcopy 会导致 make 期间出错

    我正在尝试向一个小项目添加一个构建后命令 该命令将自动获取我的构建输出文件 ELF 并将其转换为 Intel HEX 格式 以便在微控制器上闪烁 然而 当我添加此命令时 构建失败 它使用 shell 运行的所有替换的 CMake 变量字符串
  • 适用于大型和可扩展应用程序的数据库表结构

    我是一名软件工程师 几个月前就开始学习 为了我的工作 我开发了一个大型可扩展的 Web 应用程序 另一家公司负责编程工作并制作其背后的数据库 我们定义了数据以及它们之间的关系 但没有给出他们应该使用的硬数据库结构 现在第一个 内部 东西是可
  • 将 git 存储库中的一组文件拆分到自己的存储库中,保留相关历史记录[重复]

    这个问题在这里已经有答案了 可能的重复 如何在保留子目录的同时拆分 git 存储库 有一次 我将我的代码添加到了现有的 git 存储库中 并从那时起就对其进行了很多承诺 而另一位开发人员则致力于存储库中的其他现有文件 现在我想将我的代码拆分
  • Rails 区域设置不工作

    我正在使用 Rails 4我已将默认区域设置设置为位于 config application rb 中is yml 位于 config locales 中在 Rails 控制台中我输入 I18n available locales gt e
  • Cloudkit可以修改公共数据库的数据吗

    我刚刚浏览了此链接中的云套件文档cloudkit但不清楚如何修改公共数据库的数据库记录 根据cloudkit框架中的描述 使用公共数据库 如图像中所指定 默认数据是世界可读的 所有者可写的 这意味着只有所有者才能修改他的数据 其他用户只能读
  • 在 Angular 2 中创建自定义表单控件

    我正在尝试为一个创建自定义表单控件组件
  • ImageMagick 命令无法在 Powershell 窗口中运行,但可以在 cmd 窗口中运行

    该命令是给图片添加水印 magick nature jpg set option watermarkWidth fx int w 0 25 alpha set background none fill FFFFFF80 stroke FF0
  • 如何在单独的控制台上使用一种配置启动多个 Java 程序(使用 Eclipse)

    我正在使用一个具有多个组件的 Java 程序 目前使用 Eclipse 和 Ant 有没有一种方法可以通过一个启动配置启动多个程序 我有一个 Ant 目标可以完成这项工作 启动多个程序 但我想做一些事情 我想用Eclipse调试程序 因此需
  • 如何从 php 中的给定键获取数组中的下一个键? [复制]

    这个问题在这里已经有答案了 例如我有一个包含以下元素的数组 array array 1 gt a 3 gt c 4 gt d 6 gt f 如果我使用像这样的函数 我怎样才能从给定的键中获取下一个键 get next key array a
  • Api 文件 Azure 函数绑定的动态输出文件名(onedrive、dropbox 等)

    我有一个带有计时器触发器的 Azure 函数 然后我想生成一个具有动态 在运行时定义 名称和内容的文件 并将其保存到例如一个驱动器 我的功能代码 public static void Run TimerInfo myTimer out st
  • Python 计算字母出现次数

    我正在尝试计算字母的出现次数并打印它们 这是我到目前为止所拥有的 def histogram L d for x in L for letter in x if letter in d d letter 1 else d letter 1
  • UnexpectedRollbackException - JTA 事务意外回滚

    当我运行下面的代码时 我得到 UnexpectedRollbackException 而不是 ArrayIndexOutOfBoundsException 环境 Weblogic Spring Hibernate JTA 和 EJB Cod
  • 使用扩展方法验证域模型

    我一直在研究使用服务层在将域模型保存到数据库之前验证它们 我找到了下面的例子使用扩展方法来验证我的模型 但想知道这样做是否有任何具体的缺点 我没有看到验证 除了数据注释 提到那么多 我正在考虑实施以下内容 public class FooS
  • .rar、.zip 文件 MIME 类型

    我正在开发一个简单的 php 上传脚本 用户只能上传 ZIP 和 RAR 文件 我应该使用哪些 MIME 类型来检查 FILES x type 请提供完整列表 自由和平组织 Kiyarash 和 Sam Vloeberghs 的回答 rar
  • VBA将html表格数据复制到excel工作表

    我需要一个可以将本地 html 表数据提取到 Excel 工作表的 VBA 脚本 我有一些代码 在网络上的某个地方找到 可以使用 URL 链接来工作 但我想要的是能够使用本地存储的 html 文件来完成此操作 错误是我得到的是 应用程序定义
  • 如何在 python 中从特定的 ISO 格式正确解析日期

    我连接到数据库上的一个表 其中有两列带日期 我可以毫无问题地解析具有如下格式的值的列 2017 11 03但我找不到一种方法来解析日期格式如下的另一列 2017 10 03 05 06 52 840 02 00 我的尝试如果我通过解析单个值
  • OS X - 真正的“按需”特权帮助工具

    我的应用程序需要将文件写入文件系统上的受限位置 为此 我使用以 root 身份运行的辅助工具 一切正常 遵循这个例子 我的辅助工具已正确安装并运行 我使用此解决方案能够 唤醒 辅助工具 否则它在初始加载后不会启动多次 辅助工具正在等待来自主
  • 字符串到数字转换的性能问题

    我有空格分隔的字符串 其中包含中间的数字 例如 abc123 ws32wd3 y3tg43 5tga89 a1a 我必须解析字符串以获取每个标记中的数字 然后总结从标记中提取的所有数字 我写了下面的代码 但我认为 如果有很大的字符串 那么可