- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
以我有限的经验,我参与过的几个项目都有某种字符串实用程序类,这些类具有确定给定字符串是否为数字的方法。想法一直是一样的,但是实现却不同。有些用 try/catch 包围解析尝试
public boolean isInteger(String str) {
try {
Integer.parseInt(str);
return true;
} catch (NumberFormatException nfe) {}
return false;
}
和其他匹配正则表达式
public boolean isInteger(String str) {
return str.matches("^-?[0-9]+(\\.[0-9]+)?$");
}
这些方法中的一种比另一种好吗?我个人更喜欢使用正则表达式方法,因为它很简洁,但如果在迭代时调用它是否会执行相同的操作,比如说,一个包含数十万个字符串的列表?
注意:由于我是该站点的新手,所以我并不完全了解这个 Community Wiki 业务,所以如果它属于那里,请告诉我,我很乐意将其移动。
编辑:根据所有 TryParse 建议,我将 Asaph 的基准代码(感谢您的精彩帖子!)移植到 C# 并添加了 TryParse 方法。看起来,TryParse 轻而易举地获胜了。然而,try catch 方法花费了大量的时间。以至于我认为我做错了什么!我还更新了正则表达式来处理负数和小数点。
更新的 C# 基准代码的结果:
00:00:51.7390000 for isIntegerParseInt
00:00:03.9110000 for isIntegerRegex
00:00:00.3500000 for isIntegerTryParse
使用:
static bool isIntegerParseInt(string str) {
try {
int.Parse(str);
return true;
} catch (FormatException e){}
return false;
}
static bool isIntegerRegex(string str) {
return Regex.Match(str, "^-?[0-9]+(\\.[0-9]+)?$").Success;
}
static bool isIntegerTryParse(string str) {
int bob;
return Int32.TryParse(str, out bob);
}
最佳答案
我刚刚对这两种方法的性能进行了一些基准测试(在 Macbook Pro OSX Leopard Java 6 上)。 ParseInt 更快。这是输出:
This operation took 1562 ms.
This operation took 2251 ms.
这是我的基准代码:
public class IsIntegerPerformanceTest {
public static boolean isIntegerParseInt(String str) {
try {
Integer.parseInt(str);
return true;
} catch (NumberFormatException nfe) {}
return false;
}
public static boolean isIntegerRegex(String str) {
return str.matches("^[0-9]+$");
}
public static void main(String[] args) {
long starttime, endtime;
int iterations = 1000000;
starttime = System.currentTimeMillis();
for (int i=0; i<iterations; i++) {
isIntegerParseInt("123");
isIntegerParseInt("not an int");
isIntegerParseInt("-321");
}
endtime = System.currentTimeMillis();
System.out.println("This operation took " + (endtime - starttime) + " ms.");
starttime = System.currentTimeMillis();
for (int i=0; i<iterations; i++) {
isIntegerRegex("123");
isIntegerRegex("not an int");
isIntegerRegex("-321");
}
endtime = System.currentTimeMillis();
System.out.println("This operation took " + (endtime - starttime) + " ms.");
}
}
另请注意,您的正则表达式将拒绝负数,而 parseInt 方法将接受它们。
关于c# - isNumber(string) 方法的最佳实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1369077/
我目前正在使用 isnumber 来确定包含句子的单元格中是否存在特定单词。我正在尝试确定如何找到始终在特定单词之前或之后的数字的值。我如何操纵公式或创建一系列公式,以在“常量词”之前或之后提取“可变
我正在构建 Windows 窗体应用程序。我使用 char.IsNumber() 来检查按下的键是否是数字: private void AmBox_KeyPress(object sender,
我试图从两个工作表中找到重复的数字。表 1 是我尝试使用 MATCH 显示真假的地方。 1 .表 2 是我的 map ,其中包含项目的位置。 2 .我正在使用公式 =ISNUMBER(MATCH(E4
例如,在单元格 A1 中,我有产品代码 BW224 在 B1 中,我有 =RIGHT(A1,3)因为我只想要数字。公式的结果是 224 在 C1 中,我有 ISNUMBER(B1) ,返回 FALSE
我正在使用一个 Excel 文件。有一个列包含数字和文本,有时只是其中之一。我正在尝试编写一个函数来扫描单元格的最左侧部分以查看它是否以数字开头。我以为我拥有它,但显然没有。这就是我所拥有的: =IF
我是 C 的新手,我正在考虑如何自己编写这个函数。我从命令行获取一个参数,所以它存储在 argv 数组中,我想决定它是否是数字。最简单的方法是什么? 谢谢 #include int isNumber
以我有限的经验,我参与过的几个项目都有某种字符串实用程序类,这些类具有确定给定字符串是否为数字的方法。想法一直是一样的,但是实现却不同。有些用 try/catch 包围解析尝试 public bool
我正在尝试计算以下范围是否为 "Y"或 "S"并包含数字。我正在尝试排除以 "_PVxxxxx_" 开头的单元格. 我不能用 COUNTIFS($A:$A,">0",$B:$B,"Y") + COUN
所以我有这个程序;从远程系统扫描值。有时,如果网络出现故障,它可能会超时,并且会出现 #nan 错误或类似的东西。 当我尝试将该错误消息写入数据库时;因为它正在寻找一个数值,所以它会因为“数据类型
我只想对两个单元格求和(如果至少其中一个是有效数字),或者如果两个单元格都不是有效数字则显示空白。做这个的最好方式是什么?我已阅读有关 SUMPRODUCT 的内容并尝试使用 ISERROR 但无济于
此公式在单元格 I3 内查找字符串“BFA”。如果找到,则返回“BFA”;如果不是,则返回“No”。 =IF(ISNUMBER(SEARCH("BFA",I3)),"BFA","No") 如何修改它以
这个问题在这里已经有了答案: Validate decimal numbers in JavaScript - IsNumeric() (52 个答案) 关闭 9 年前。 我的猜测是: functi
为什么 "".All(char.IsNumber) 返回 true?根据方法总结,All()方法: Determines whether all elements of a sequence sati
看起来 AngularJS 的 angular.isNumber 没有工作。它不适用于数字字符串。难道我做错了什么?我应该只使用 isNaN() 吗? angular.isNumber('95.55'
我的 ctype.h 中有函数 isnumber()。我在 http://www.cplusplus.com/reference/cctype/ 中都没有的书中找不到此函数的引用资料供咨询。我打算通过
如何在 JSTL 中做这个简单的检查(不扩展任何 Java 类和额外的 JSP 函数)。我需要这样: // do something 提前致谢。 最佳答案 如果您的环境支持在 EL 对象上
假设单元格 A1 的日期为:2017 年 1 月 1 日。 然后下面的宏给出了不同的结果: 第一个 - 正确 第二个 - 错误。 造成这种差异的原因是什么?我应该如何正确使用IsNumeric? Su
在underscore.js中,下面的代码好像是加了_.isNumber() // Add some isType methods: isArguments, isFunction, isStri
我正在尝试根据内容将excel中的单列数字转换为多列。 例如表 1 包含 1 列,其中包含 1 个或多个 1 到 11 之间的数字,用逗号分隔。表 2 应包含 11 列,其中 1 或 0 取决于表 1
我是 Angular 的新手。我正在尝试根据某些条件切换 div : {{getName(row)}}
我是一名优秀的程序员,十分优秀!