【问题标题】:Java REGEX for numbers 1 to 100 [duplicate]数字 1 到 100 的 Java 正则表达式 [重复]
【发布时间】:2014-01-16 19:49:20
【问题描述】:

我正在尝试编写一个正则表达式来仅接受 1-100 之间的数字。如果它能接受从 1 到无穷大的所有内容,那就太好了,但这可能太复杂了——或者说不可能。

public static boolean isNumeric(String str) {
return str.matches("-?\\d+(\\.\\d+)?");
}//end boolean.

【问题讨论】:

  • 为什么要使用正则表达式来完成这项任务?只需将str 转换为int,然后检查范围。那会容易得多。
  • @RohitJain 如下所述,这可能会导致抛出异常。

标签: java


【解决方案1】:

如果它能接受从 1 到无穷大的所有内容,那就太好了,但这可能太复杂了——或者不可能。

简单的"[1-9]\\d*"怎么样?

这将接受一个非零数字,后跟任何数字序列。换句话说,任何正整数。

【讨论】:

  • 快速思考,由于输入是一个字符串,它可能在开始时包含一个 0 的字符串,如“007”,也许更好的答案是:0*[1-9]\\d*
【解决方案2】:
public static boolean isNumeric(String str) throws NumberFormatException {
    int i = Integer.parseInt(str); 
    return i > 0 && i < 100; //Arbitrary numbers within range of int
}

不使用正则表达式,但这应该可以完成同样的事情。将字符串转成整数,然后检查是否在你想要的范围内。

【讨论】:

  • 如果字符串包含非数字字符,这将引发异常。
  • 不需要解析两次,并使用NumberFormatException 将其包装在try catch 中,如果OP 想要无穷大,整数可能会溢出。
  • 两个 cmets 都是完全正确的,这只是一个快速而肮脏的例子,让他指出一个可能有帮助的方向。我会尽快修改以解决这些问题。
【解决方案3】:

如果你想真正彻底,你可以使用"-?(0|([1-9][0-9]*))\.?[0-9]*",它应该给你从-infinity到+inifinity的所有数字。摆脱-? 会给你所有的正数。 "0|(-?[1-9][0-9]*)" 应该为您提供从 -infinity 到 +infinity 的所有整数。 "[1-9][0-9]*" 会给你所有大于 0 的整数。

【讨论】:

  • 您知道如何将其限制在包含负数的范围内吗?例如 -100 到 +100?
猜你喜欢
  • 2016-02-27
  • 1970-01-01
  • 1970-01-01
  • 2019-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-12
相关资源
最近更新 更多