java中整数的正则表达式

时间:2014-03-28 07:13:28

标签: java regex

在我的项目中,我想在数据集中搜索员工ID(整数)。 如果用户输入234作为部分数据,那么我想获取从234开始的所有员工ID。目前我正在将int转换为String,然后使用String`s contains方法。 我想知道有没有更好的方法...

   String.valueof(employee.getEmployeeId()).contains(EnterNumber) ; 

P.S。 我发现写正则表达式非常困难,很好地参考regEx会很棒。在此先感谢

3 个答案:

答案 0 :(得分:0)

正如你所说,这可行:

'^(234).*'

'^'+input+'.*'

答案 1 :(得分:0)

如果Id(比如234789920252),您可以使用正则表达式

  ^234\d*$

  String pattern = "^" + EnterNumber + "\\d*$";

如果你的任务是找出开始的标识为“234”,你宁愿使用startWith,而不是contains

   String.valueof(employee.getEmployeeId()).startsWith(EnterNumber);

答案 2 :(得分:0)

您可以按照以下公式实施数字解决方案:

trunc(n / 10^(trunc(log(n, 10)) - trunc(log(m, 10)))) == m

其中n是您要测试的数字,m是要匹配的目标数字前缀。在您的示例中,m = 234

  • trunc(log(n, 10))是位数 - n
  • 中的1位数
  • trunc(log(m, 10))是位数 - m
  • 中的1位数
  • 如果您将n除以10^(trunc(log(n, 10)) - trunc(log(m, 10)))并将其截断,则如果mn
  • 开头,则结果等于m

R中用于概念验证的实现:

starts <- function(n, m) {
    trunc(n / 10^(trunc(log(n, 10)) - trunc(log(m, 10)))) == m
}
> starts(234, 234)
[1] TRUE
> starts(2345, 234)
[1] TRUE
> starts(23, 234)
[1] FALSE
> starts(123, 234)
[1] FALSE
> starts(1, 234)
[1] FALSE
> starts(9898, 234)
[1] FALSE

但这比转换为String并使用正则表达式匹配要好吗?那,我不知道......