当前位置: 首页 > 知识库问答 >
问题:

如何检查字符串在Java中是否为数字

芮宇航
2023-03-14

在解析字符串之前,如何检查字符串是否为数字?

共有2个答案

庾波光
2023-03-14

这通常是通过一个简单的用户定义函数(即Roll-your-own“isnumeric”函数)来完成的。

类似于:

public static boolean isNumeric(String str) { 
  try {  
    Double.parseDouble(str);  
    return true;
  } catch(NumberFormatException e){  
    return false;  
  }  
}

但是,如果您多次调用该函数,并且您希望许多检查由于不是数字而失败,那么该机制的性能将不会很好,因为您依赖于为每次失败抛出的异常,这是一个相当昂贵的操作。

另一种方法可能是使用正则表达式来检查是否为数字:

public static boolean isNumeric(String str) {
  return str.matches("-?\\d+(\\.\\d+)?");  //match a number with optional '-' and decimal.
}

但是,要小心使用上面的正则表达式机制,因为如果您使用的是非阿拉伯数字(即0到9以外的数字),它将失败。这是因为正则表达式的“\d”部分将只匹配[0-9],并且实际上在国际上并不知道数字。(感谢OregonGhost指出这一点!)

甚至还有一种选择是使用Java内置的Java.text.NumberFormat对象来查看解析字符串后解析器的位置是否在字符串的末尾。如果是,我们可以假设整个字符串都是数值:

public static boolean isNumeric(String str) {
  NumberFormat formatter = NumberFormat.getInstance();
  ParsePosition pos = new ParsePosition(0);
  formatter.parse(str, pos);
  return str.length() == pos.getIndex();
}
虞安康
2023-03-14

使用Apache Commons Lang 3.5及以上版本:numberutils.iscreatablestringutils.isnumeric

使用Apache Commons Lang 3.4及以下版本:numberutils.isnumberstringutils.isnumberic

还可以使用stringutils.isNumericSpace,它为空字符串返回true并忽略字符串中的内部空格。另一种方法是使用numberutils.isparsable,它基本上根据Java检查数字是否可解析。(链接的javadocs包含每个方法的详细示例。)

 类似资料:
  • 问题内容: 在解析字符串之前,如何检查字符串是否为数字? java 字符串 数字 问题答案: 使用及更高版本:或。 使用Apache Commons Lang 3.4及以下版本:或。 你还可以使用返回true空字符串,并忽略字符串中的内部空格。另一种方法是使用根据Java基本检查数字是否可解析的方法。(链接的javadocs包含每种方法的详细示例。)

  • 问题内容: 如何在Java中检查字符串是否为数字? 问题答案: 使用Apache Commons Lang 3.5及更高版本:NumberUtils.isCreatable或StringUtils.isNumeric。 使用Apache Commons Lang 3.4及以下版本:NumberUtils.isNumber或StringUtils.isNumeric。 你还可以使用StringUti

  • 问题内容: 在Java forString类中,有一个称为matchs的方法,该方法如何使用正则表达式检查我的字符串是否只有数字。我尝试了以下示例,但它们均使我返回了false。 问题答案: 尝试 要么 按照Java 正则表达式 ,其 含义是“一次或多次”,并且其含义是“数字”。 注意:“双反斜杠”是一个 转义序列, 用于获取单个反斜杠-因此,在Java字符串中会提供实际结果: 参考文献: Jav

  • 在Java for String类中有一个叫做matches的方法,如何使用这个方法使用正则表达式来检查我的字符串是否只有数字。我尝试了下面的例子,但他们都返回我的结果是假的。

  • 问题内容: 检查字符串是否可以在Python中表示为数字的最佳方法是什么? 我目前拥有的功能是: 它不仅丑陋而且缓慢,看起来笨拙。但是我还没有找到更好的方法,因为调用函数甚至更糟。 问题答案: 不仅丑陋而且缓慢 我都对此表示怀疑。 正则表达式或其他字符串解析方法将更难看,更慢。 我不确定任何事情都可以比上述速度更快。它调用该函数并返回。不会带来太多的开销,因为最常见的异常是在没有大量搜索堆栈帧的情

  • 我有一个gpa程序,它使用方法,该方法比较字母“a”和用户输入的两个字符串,然后检查它们是否输入“a”。但现在我想添加一个异常,该异常在输入数字时会执行错误消息。我想让程序意识到整数输入与字符串不一样,并给出一个错误消息。我可以使用哪些方法来比较类型字符串变量和int类型的输入,并抛出异常?