检查字符串是不是为有效数字的逻辑[重复]
Posted
技术标签:
【中文标题】检查字符串是不是为有效数字的逻辑[重复]【英文标题】:Logic to check if the String is a valid number or not [duplicate]检查字符串是否为有效数字的逻辑[重复] 【发布时间】:2013-08-07 08:51:27 【问题描述】:我正在使用以下逻辑来检查收到的字符串是否为有效数字
package com;
public class Test
public static void main(String args[])
String str = "122";
boolean b = isNumb(str);
System.out.println(b);
public static boolean isNumb(String str)
String s = str;
for (int i = 0; i < s.length(); i++)
if (!Character.isDigit(s.charAt(i)))
return false;
return true;
我将在一个高度多线程的环境中使用它,一次可以有 800 - 900 个并发用户,如果这段代码有任何漏洞,请告诉我??
请分享你的看法
提前致谢
【问题讨论】:
你能用这样的东西吗? ***.com/questions/1102891/… 顺便说一句,您的代码不适用于浮点数,甚至不讨论十六进制之类的东西。 你的方法完全没问题。另一种选择是使用str.toCharArray()
并直接检查生成的char[]
,而不是检查charAt()
方法中的边界。但我认为您不会注意到小字符串的性能改进(尤其是与生成的需要收集的垃圾 char[] 相比)。
您的代码会因负数而中断:)
@anubhava 矫枉过正? :p
【参考方案1】:
我会使用正则表达式:
public static boolean isNumb(String str)
return str.matches("\\d+");
若要对负数也返回 true,请添加可选的前导破折号:
return str.matches("-?\\d+");
【讨论】:
@giorashc 这是 OP 编写的代码的替代方案,它不检查负数。但你当然有道理。 正则表达式会比检查每个字符慢。 @giorashc 我添加了负数支持【参考方案2】:用于验证给定字符串是否为有效数字(不仅仅是整数):
boolean b = str.matches("^[+-]?(?=.)\\d*(\\.\\d+)?$");
【讨论】:
【参考方案3】:我只需执行以下操作来检查字符串是否为数字:
try
final Integer i = Integer.parseInt("Your String");
catch(final NumberFormatException nfe)
//String is no number
【讨论】:
检查失败时会出现性能问题。这是“使用异常进行流控制”反模式的一个例子。不过,它是一种可靠的方法。 @MarkoTopolnik 如果预计大多数输入将是数字,这是一个很好的折衷方案(在不引发异常的情况下,性能与 char 上的循环一样好)。 @assylias 就个人而言,我很少使用其他任何东西,主要是因为可靠性方面。我的正则表达式或我可能拥有的任何其他复杂逻辑总是有问题。其实我有点气 JDK 本身没有提供非抛出方法。【参考方案4】:有更好的方法来检查字符串是否为数字,例如使用正则表达式。
s.matches("^-?\\d+(\\.\\d)?$")
会很容易的获取字符串是否为数字,其中 s 是你的字符串。
【讨论】:
这只允许保留一位小数。而在matches
的上下文中,您不需要^
和$
锚点。以上是关于检查字符串是不是为有效数字的逻辑[重复]的主要内容,如果未能解决你的问题,请参考以下文章
在将字符串转换为 int 之前检查字符串是不是不是数字 [重复]