gpt4 book ai didi

scala - Scala 中 String 到 Int 到 String 的转换有多昂贵?

转载 作者:行者123 更新时间:2023-12-04 19:53:58 26 4
gpt4 key购买 nike

我正在尝试检查特定字符串是否为 Int(或 BooleanLong 等等)但 并不真的需要将其解析为Int(或其他)。我可以想到两种选择。首先,执行 var.toInt.toString 或返回调用 toInt 的实际字符串(如果它是 Int)。虽然两者都很好用,但我想知道前者是否比后者贵得多。仅供引用,我不会以这种方式解析很长的字符串,但我将处理数 TB 的数据。

最佳答案

首先,回答确切的问题:

.toString 在我的机器上需要几十纳秒,具体细节当然取决于机器以及 int 的字符串表示形式的长度(最短之间的差异约为 2 倍)和最长)。 .toInt 花费更少(大约是 toString 时间的 1/2 到 3/4)。

这重要吗?好吧,超过 TB 的数据(我猜大部分是数字)你将有数万亿,数十纳秒,或数万秒。所以也许是这样;这将是数小时的额外计算时间。

但这不是将要发生的事情。如果您对 不是 整数的对象使用 toInt,您将抛出异常。异常真的很慢——通常至少几微秒。如果超过 1/1000 的假定整数实际上不是整数,那么您将花费大量时间为解析异常创建大堆栈跟踪,然后将它们丢弃。

您可以尝试使用正则表达式。这通常比只进行解析要贵 10 倍,但比抛出异常要便宜 10 倍。仍然不是一个好的选择,除非你有几个额外的计算日来解决这个问题,特别是因为正则表达式只会告诉你它是否是 int-like,而不是它是否在范围内,所以你必须解析无论如何(并捕获异常或进行精细的边界检查)。

因此,如果您真的希望它更快,您最终必须手动进行验证、对字符串进行索引、使用 charAt 抓取字符,等等。是的,这很痛苦。但是,如果您自己解析它,它将与单个 .toInt 一样快。这是一大段丑陋的代码。使用 java.lang.Character.digit 通常是如果人们可能有其他字符集中的数字值的方法(您可以捕获 -1 返回和保释)。不要忘记以稍微不同的方式处理正数和负数(由于范围不同)。

附录:您可能认为 java.util.Scanner 只是门票。它遍历数据并有一个 hasNextInt 方法。不幸的是,它太慢了。

另见 What's the best way to check to see if a String represents an integer in Java?对于 Java 问题的答案(没有一个是 IMO 的想法)。

关于scala - Scala 中 String 到 Int 到 String 的转换有多昂贵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32893428/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com